2013-05-15 89 views
0

我有一個列表與ImageView和TextView。我讀取了掃描時間,並且必須設置textview的指定位置。這是以正確的方式完成的,但是在向下滾動之後,然後在Listview中設置另一個文本視圖。我看到這不是新的,但我無法解決這個問題。任何想法? BaseAdapter如下。我嘗試了更多的一個星期,但沒有解決方案ListView與ImageView和TextView,滾動後向上隨機項目設置

@Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 

      if (convertView == null) { 
       Log.d("convertView", "NULLL"); 


       convertView = LayoutInflater.from(mContenxt).inflate(
         R.layout.list_items, null); 

       holder = new ViewHolder(); 

       holder.textView = (TextView) convertView 
         .findViewById(R.id.placeName); 

       holder.imageView = (ImageView) convertView 
         .findViewById(R.id.itemSymbole); 

       holder.textDate = (TextView) convertView 
         .findViewById(R.id.txtViewTimeAndDate); 

       holder.imageMap = (ImageView)convertView.findViewById(R.id.imageViewMap); 

       holder.linearLayoutText = (LinearLayout)convertView.findViewById(R.id.txtViewList); 


       holder.linearLayoutImage = (LinearLayout)convertView.findViewById(R.id.thumbnail); 

       convertView.setTag(holder); 

      } 
       Log.d("convertView", "Not NULLLL"); 
       holder = (ViewHolder) convertView.getTag(); 


      holder.id = position; 

      holder.textView.setText(items.get(position).get("ProductName")); 
      holder.imageView.setId(position); 


      holder.linearLayoutText.setBackgroundColor(position); 


      if (items.get(position).get("Identifier") 
        .equals(com.metasec.wachmann.ItemActivity.uID)) { 

       holder.linearLayoutText.setBackgroundColor(Color.CYAN); 

       holder.imageView.setImageResource(R.drawable.ok); 

       Log.d("TIMEEEE", ItemActivity.scannDateAndTime); 

       holder.textDate.setText(ItemActivity.scannDateAndTime); 
       notifyDataSetChanged(); 
      }else { 

       holder.imageView.setImageResource(R.drawable.not_ok); 
       holder.textDate.setText(""); 
       notifyDataSetChanged(); 
      } 

      holder.linearLayoutText.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        holder.linearLayoutText.setBackgroundColor(position); 
        holder.linearLayoutText.setBackgroundColor(Color.RED); 
        notifyDataSetChanged(); 

        String placeName = items.get(position).get("ProductName"); 
        String identifier = items.get(position).get("Identifier"); 
        String itemId = items.get(position).get("ItemId"); 
        String propertyBaseId = null; 

        String gpsCoordinates = null; 

        GPSTracker gpsTracker = new GPSTracker(mContenxt); 
        gpsTracker.stopUsingGPS(); 

        double latitude = 0; 
        double longitude = 0; 

        if (gpsTracker.canGetLocation()) { 
         latitude = gpsTracker.getLatitude(); 
         longitude = gpsTracker.getLongitude(); 

         gpsCoordinates = latitude + ", " + longitude; 
        } 

        for (int k = 0; k < LoggedActivity.propertyBaseList.size(); k++) { 
         if (LoggedActivity.propertyBaseList.get(k).getName() 
           .equals("xxxxxxx")) { 

          propertyBaseId = LoggedActivity.propertyBaseList.get(k) 
            .getPropertyBaseId(); 


          Intent intentSenderDataToServer = new Intent(mContenxt, 
            SenderReportDemageToServerActivity.class); 



          // give ItemId 
          intentSenderDataToServer.putExtra(ITEM_ID, itemId); 

          // give GroupId 
          intentSenderDataToServer.putExtra(PRODUCT_NAME, 
            placeName); 

          // give GroupName 
          intentSenderDataToServer.putExtra(IDENTIFIER, 
            identifier); 

          // give PropertyBaseID 
          intentSenderDataToServer.putExtra(PROPERTY_BASE_ID, 
            propertyBaseId); 

          // give GPS Coordinates 
          intentSenderDataToServer.putExtra(GPS_COORDINATES, 
            gpsCoordinates); 

          Log.d("items.get(position).get(ProductNNNNName)", items 
            .get(position).get("ProductName")); 

          intentSenderDataToServer.putExtra("ProductName", 
            placeName); 
          intentSenderDataToServer.putExtra("Identifier", 
            identifier); 
          mContenxt.startActivity(intentSenderDataToServer); 

         } // END IF Loop 

        } // END FOR Loop 

       } 
      }); 



      holder.imageMap.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        String placeName = items.get(position).get("ProductName"); 
        String identifier = items.get(position).get("Identifier"); 
        String itemId = items.get(position).get("ItemId"); 


        Log.d("placeName11",placeName); 
        Log.d("identifier111",identifier); 
        Log.d("itemId111",itemId); 

        Intent intentWachmanMapActivitiy = new Intent(mContenxt, 
          WachmanOpenStreetMapViewActivity.class); 


        intentWachmanMapActivitiy.putExtra(ITEM_ID, itemId); 

        // give GroupId 
        intentWachmanMapActivitiy.putExtra(PRODUCT_NAME, 
          placeName); 

        // give GroupName 
        intentWachmanMapActivitiy.putExtra(IDENTIFIER, 
          identifier); 

        Log.d("items.get(position).get(ProductNNNNName)", items 
          .get(position).get("ProductName")); 

        intentWachmanMapActivitiy.putExtra("ProductName", 
          placeName); 
        intentWachmanMapActivitiy.putExtra("Identifier", 
          identifier); 


        mContenxt.startActivity(intentWachmanMapActivitiy); 

       } 
      }); 

      return convertView; 
     } 

     static class ViewHolder { 
      TextView textView = null; 
      TextView textDate = null; 
      CheckBox checkbox = null; 
      ImageView imageView = null; 
      ImageView imageMap = null; 
      ImageButton imageButtonMap = null; 

      LinearLayout linearLayoutText = null; 
      LinearLayout linearLayoutImage = null; 
      int id; 

     } 

而下面的類顯示我自己的適配器將被調用。我backgroudn我必須打電話給我的適配器和以前的時間和數字必須保持。

private class SendBackground extends AsyncTask<Void, Void, Boolean> 
{ 
    @Override 
    protected void onPreExecute() { 
      mProgDialog = new ProgressDialog(getBaseContext()); 
      mProgDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      mProgDialog = ProgressDialog.show(ItemActivity.this, "Sending", " Please Wait"); 

    } 


    @Override 
    protected Boolean doInBackground(Void... params) { 
     // TODO Auto-generated method stub   
     return httpRequest.postData(itemIdTmp, propertyBaseIdtmp, uID, coordinatesTmp); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     Log.d("SendBackground", "onPostExecute"); 

     if (result == true) { 
      Log.d("onPostExecute", "TRUE"); 
      //mProgressBar.setVisibility(View.GONE); 

      mProgDialog.dismiss(); 
      Toast.makeText(getApplicationContext(), "Data sent..", 
        Toast.LENGTH_LONG).show(); 

        /*----------------------------->>>> Whenever from Server True is return then my oown adapter hast to be adapted, as mentioned the state and time of previous items have to be remained */ 
      //setListAdapter(myBaseAdapterItemActivity); 
      listView.setAdapter(myBaseAdapterItemActivity); 
      myBaseAdapterItemActivity.notifyDataSetChanged(); 
     } else { 

      mProgDialog.dismiss(); 

      Toast.makeText(getApplicationContext(), 
        "Sending Data to Server failed", Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 

} 
+0

如果(items.get(位置)獲得(「標識」)告訴我,如果這個條件未能 –

+0

嗨爬完亞達將是什麼,如果這樣做失敗了,那麼我不需要做任何事情,我從一個標籤中讀取數據,並且在這個列表視圖中,這個項目中的每一個都有一個UID,如果我讀取的ID是相同的,那麼在textview中必須設置時間。 – student

+0

I意思是,如果失敗的是這些領域 holder.linearLayoutText.setBackgroundColor(Color.CYAN)的值; holder.imageView.setImageResource(R.drawable.ok); –

回答

0

//讀我寫的所有意見,其中需要modifiaction //不要叫notifiy內部適配器的數據集變化。 //如果它不會工作,那麼我會寫一個示例代碼

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; // use it 

    if (convertView == null) { 
     Log.d("convertView", "NULLL"); 


     convertView = LayoutInflater.from(mContenxt).inflate(
       R.layout.list_items, null); 

     holder = new ViewHolder(); 

     holder.textView = (TextView) convertView 
       .findViewById(R.id.placeName); 

     holder.imageView = (ImageView) convertView 
       .findViewById(R.id.itemSymbole); 

     holder.textDate = (TextView) convertView 
       .findViewById(R.id.txtViewTimeAndDate); 

     holder.imageMap = (ImageView)convertView.findViewById(R.id.imageViewMap); 

     holder.linearLayoutText = (LinearLayout)convertView.findViewById(R.id.txtViewList); 


     holder.linearLayoutImage = (LinearLayout)convertView.findViewById(R.id.thumbnail); 

     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); // new changes 
     Log.d("convertView", "Not NULLLL"); 
    } 

    holder.id = position; 

    holder.textView.setText(items.get(position).get("ProductName")); 
    holder.imageView.setId(position); // why you set position it will cause error 


    //holder.linearLayoutText.setBackgroundColor(position); 


    if (items.get(position).get("Identifier") 
      .equals(com.metasec.wachmann.ItemActivity.uID)) { 

     holder.linearLayoutText.setBackgroundColor(Color.CYAN); 

     holder.imageView.setImageResource(R.drawable.ok); 

     Log.d("TIMEEEE", ItemActivity.scannDateAndTime); 

     holder.textDate.setText(ItemActivity.scannDateAndTime); 
     // notifyDataSetChanged(); no need to call it. 
    }else { 

     holder.imageView.setImageResource(R.drawable.not_ok); 
     holder.linearLayoutText.setBackgroundColor(Color.GREEN); 
     holder.textDate.setText(""); 
     //notifyDataSetChanged(); no need to call it. 
    } 

    holder.linearLayoutText.setTag(position); 
    holder.linearLayoutText.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // holder.linearLayoutText.setBackgroundColor(position); 
      holder.linearLayoutText.setBackgroundColor(Color.RED); 
      // notifyDataSetChanged(); 

      int selectedPosition = (Integer)v.getTag(); 

      String placeName = items.get(selectedPosition).get("ProductName"); 
      String identifier = items.get(selectedPosition).get("Identifier"); 
      String itemId = items.get(selectedPosition).get("ItemId"); 
      String propertyBaseId = null; 

      String gpsCoordinates = null; 

      GPSTracker gpsTracker = new GPSTracker(mContenxt); 
      gpsTracker.stopUsingGPS(); 

      double latitude = 0; 
      double longitude = 0; 

      if (gpsTracker.canGetLocation()) { 
       latitude = gpsTracker.getLatitude(); 
       longitude = gpsTracker.getLongitude(); 

       gpsCoordinates = latitude + ", " + longitude; 
      } 

      // you are starting activity in lop it is dangerous because 
      // you are launching many activity. 
      // you should pass array 
      // i do not know are requirement. 

      for (int k = 0; k < LoggedActivity.propertyBaseList.size(); k++) { 
       if (LoggedActivity.propertyBaseList.get(k).getName() 
         .equals("xxxxxxx")) { 

        propertyBaseId = LoggedActivity.propertyBaseList.get(k) 
          .getPropertyBaseId(); 


        Intent intentSenderDataToServer = new Intent(mContenxt, 
          SenderReportDemageToServerActivity.class); 



        // give ItemId 
        intentSenderDataToServer.putExtra(ITEM_ID, itemId); 

        // give GroupId 
        intentSenderDataToServer.putExtra(PRODUCT_NAME, 
          placeName); 

        // give GroupName 
        intentSenderDataToServer.putExtra(IDENTIFIER, 
          identifier); 

        // give PropertyBaseID 
        intentSenderDataToServer.putExtra(PROPERTY_BASE_ID, 
          propertyBaseId); 

        // give GPS Coordinates 
        intentSenderDataToServer.putExtra(GPS_COORDINATES, 
          gpsCoordinates); 

        Log.d("items.get(position).get(ProductNNNNName)", items 
          .get(position).get("ProductName")); 

        intentSenderDataToServer.putExtra("ProductName", 
          placeName); 
        intentSenderDataToServer.putExtra("Identifier", 
          identifier); 
        mContenxt.startActivity(intentSenderDataToServer); 

       } // END IF Loop 

      } // END FOR Loop 

     } 
    }); 

    holder.imageMap.setTag(postion); 

    holder.imageMap.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      int selectedPosition = (Integer)v.getTag(); 
      String placeName = items.get(selectedPosition).get("ProductName"); 
      String identifier = items.get(selectedPosition).get("Identifier"); 
      String itemId = items.get(selectedPosition).get("ItemId"); 


      Log.d("placeName11",placeName); 
      Log.d("identifier111",identifier); 
      Log.d("itemId111",itemId); 

      Intent intentWachmanMapActivitiy = new Intent(mContenxt, 
        WachmanOpenStreetMapViewActivity.class); 


      intentWachmanMapActivitiy.putExtra(ITEM_ID, itemId); 

      // give GroupId 
      intentWachmanMapActivitiy.putExtra(PRODUCT_NAME, 
        placeName); 

      // give GroupName 
      intentWachmanMapActivitiy.putExtra(IDENTIFIER, 
        identifier); 

      Log.d("items.get(position).get(ProductNNNNName)", items 
        .get(position).get("ProductName")); 

      intentWachmanMapActivitiy.putExtra("ProductName", 
        placeName); 
      intentWachmanMapActivitiy.putExtra("Identifier", 
        identifier); 
      mContenxt.startActivity(intentWachmanMapActivitiy); 

     } 
    }); 

    return convertView; 
} 

static class ViewHolder { 
    TextView textView = null; 
    TextView textDate = null; 
    CheckBox checkbox = null; 
    ImageView imageView = null; 
    ImageView imageMap = null; 
    ImageButton imageButtonMap = null; 

    LinearLayout linearLayoutText = null; 
    LinearLayout linearLayoutImage = null; 
    int id; 

} 
+0

我希望這會幫助您 –

+0

告訴我,如果它工作與否,txtDate並根據您的數據進行佈局後臺更新。 –

+0

嗨pawan yadav,非常感謝你,解決這個問題。但我有一個問題,也許你可以幫助我。我如何保存Listview的狀態。例如如果列表中的項目例如位置10,textDate和imageView被設置,則時間和圖像應該保存,這意味着可以看到。如果我點擊項目12,那麼我應該選擇文本日期在位置10和位置12的另一個scannim時間,並且imageview應該設置爲OK。我不知道我是否可以解釋我想要的。我多次撥打適配器,例如30次,每次都應該保存。 – student