2012-12-27 26 views
0

我有4组联系人(Type1,2,3,无)。我想加载不同的图像3 Type1,2,3,如果接触属于无则列表视图不应包含任何图片。这是我的代码动态加载图像到列表视图

@Override  
public View getView(int position, View convertView, 
ViewGroup parent) {    
// return super.getView(position, convertView, parent); 

     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) ContactsListActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.contacts_list_row_view, null); 
     } 

     try { 
      contactsData = (ContactsItem) getItem(position); 
     } catch (Exception e) { 

     } 

     if (null != contactsData){ 
      final CheckBox contactsSelectedCheck = (CheckBox) v.findViewById(R.id.contact_selected_check); 
      TextView contactNameText = (TextView) v.findViewById(R.id.contact_name_text); 
      TextView contactNumberText = (TextView) v.findViewById(R.id.contact_number_text); 
      ImageView contactImage = (ImageView) v.findViewById(R.id.contact_image); 

      contactNameText.setText(contactsData.getContactName()); 
      contactNumberText.setText(contactsData.getContactNumber());    

      if(contactNameText != null && contactNumberText != null){ 
      if(contactsData.getContactProfileType() == DBConstants.TYPE_1){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_1)); 
      } else if(contactsData.getContactProfileType() == DBConstants.TYPE_2){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_2)); 
      } else if(contactsData.getContactProfileType() == DBConstants.TYPE_3){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_3)); 
      }else{ 

      } 
      } 

      if (selectedContactsTable.containsKey(contactsData.getContactNumber())) { 
       contactsSelectedCheck.setChecked(true);    
      } else { 
       contactsSelectedCheck.setChecked(false);     
      } 

      contactsSelectedCheck.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        if (contactsSelectedCheck.isChecked()) { 
         LinearLayout r_layout = (LinearLayout) v.getParent(); 
         TextView contactName = (TextView) r_layout.getChildAt(1); 
         TextView contactNumber = (TextView) r_layout.getChildAt(2); 
         selectedContactsTable.put(contactNumber.getText().toString(), contactName.getText().toString()); 
        }else{ 
         LinearLayout r_layout = (LinearLayout) v.getParent(); 
         TextView contactNumber = (TextView) r_layout.getChildAt(2); 
         selectedContactsTable.remove(contactNumber.getText().toString()); 
        } 
       } 
      }); 

     } 
     return v; 
    } 
} 

问题与此是,如果我分配一些接触类型1相应的图像为这种类型加载正确,但当我滚动列表相同的图像将加载到一些未分配也,有没有问题与我的代码请告诉我

回答

1

做类别持有者提出了其他问题。为每一个你创建的适配器做持有人。

要回答你的问题,试试这个编辑:

 contactImage.setVisibility(View.Visible); 
     if(contactsData.getContactProfileType() == DBConstants.TYPE_1){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_1)); 
     } else if(contactsData.getContactProfileType() == DBConstants.TYPE_2){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_2)); 
     } else if(contactsData.getContactProfileType() == DBConstants.TYPE_3){     contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_3)); 
     }else{ 
      contactImage.setVisibility(View.GONE); 
     } 
+0

由于其做工精细.. – Pradeep

1

尝试为您的意见持有人类。然后在if(v == null)块中,可以在else块中使用setTag()并使用getTag()。这里有一些代码。

public static class ViewHolder { 
    TextView contactNameText; 
    TextView contactNumberText; 
    ImageView contactImage; 
} 

这是一个持有人类,包含您的意见。然后,getView()方法的第一部分应如下所示:

View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater) ContactsListActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.contacts_list_row_view, null); 
     holder = new ViewHolder(); 
     holder.contactNameText = (TextView) v.findViewById(R.id.contact_name_text); 
     holder.contactNumberText = (TextView) v.findViewById(R.id.contact_number_text); 
     holder.contactImage = (ImageView) v.findViewById(R.id.contact_image); 
     v.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder) v.getTag(); 
    } 

    try { 
     contactsData = (ContactsItem) getItem(position); 
    } catch (Exception e) { 

    } 

    if (null != contactsData){ 
     final CheckBox contactsSelectedCheck = (CheckBox) v.findViewById(R.id.contact_selected_check); 
     holder.contactNameText.setText(contactsData.getContactName()); 
     holder.contactNumberText.setText(contactsData.getContactNumber());    

     if(contactNameText != null && contactNumberText != null){ 
     if(contactsData.getContactProfileType() == DBConstants.TYPE_1){     holder.contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_1)); 
     } else if(contactsData.getContactProfileType() == DBConstants.TYPE_2){     holder.contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_2)); 
     } else if(contactsData.getContactProfileType() == DBConstants.TYPE_3){     holder.contactImage.setImageDrawable(getResources().getDrawable(R.drawable.icon_3)); 
     }else{ 

     } 
     } 
+0

感谢不错的方法,但仍同样的问题 – Pradeep