1

各行に 1 つの TextView と 1 つの ImageView があるカスタム リスト ビューがあります。ユーザーが行をクリックすると、行の画像が変わります。

以下は私が書いたコードです。

list.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

    img = (ImageView) view.findViewById(R.id.imageseleckted);
    Toast.makeText(MainActivity.this, String.valueOf(id), Toast.LENGTH_SHORT).show();

    if (SmsMultiCasting.selectedRow[(int)id] == 0) {
        img.setImageResource(R.drawable.tik);
        SmsMultiCasting.selectedRow[(int)id] = 1;
    } else {
        SmsMultiCasting.selectedRow[(int)id] = 0;
        img.setImageResource(R.drawable.uncheck);
    }
}

しかし、10行目、次の行、10行目などをクリックすると、画像も変わります。

選択した行だけがイメージを変更することをどのように定義できますか?

4

5 に答える 5

1

ここで最適な設計パターンは、ViewHolder を使用することです。ビューホルダーを使用してクリックイベントを処理できます。以下のカスタムアダプターコード

public class CustomListAdapter extends BaseAdapter {

    private ArrayList listData;

    private LayoutInflater layoutInflater;

    public CustomListAdapter(Context context, ArrayList listData) {
        this.listData = listData;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return listData.size();
    }

    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
            holder = new ViewHolder();
            holder.headlineView = (TextView) convertView.findViewById(R.id.title);
            holder.reporterNameView = (TextView) convertView.findViewById(R.id.reporter);
            holder.reportedDateView = (TextView) convertView.findViewById(R.id.date);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.headlineView.setText(listData.get(position).getHeadline());
        holder.reporterNameView.setText("By, " + listData.get(position).getReporterName());
        holder.reportedDateView.setText(listData.get(position).getDate());


        holder.headlineView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // handle your click event here
        }
        });


        return convertView;
    }

    static class ViewHolder {
        TextView headlineView;
        TextView reporterNameView;
        TextView reportedDateView;
    }

}

ここで完全なチュートリアルを見ているかもしれませんAndroid ListView チュートリアル

于 2013-08-12T06:04:05.393 に答える