0

4 つの連絡先グループ (Type1、2、3、None) があります。タイプ 1、2、3 の異なる画像 3 をロードしたいのですが、連絡先が None に属している場合、リストビューに画像を含めないでください。これが私のコードです

@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 対応する画像にいくつかの連絡先を割り当てた場合ですが、リストをスクロールすると、割り当てられていない画像にも同じ画像が読み込まれます。私のコードに問題はありますか教えてください

4

2 に答える 2

1

ビューのホルダー クラスを作成してみてください。次に、if(v==null) ブロックで setTag() を使用し、else ブロックで 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{

        }
        }
于 2012-12-27T14:50:08.100 に答える
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);
        }
于 2012-12-27T14:59:10.907 に答える