2

全てにおいて良い日。

各テキストビューの近くにチェックボックスがあるリストビューがあります。1 つのチェックボックスをオンにして下にスクロールすると、ランダムな他のチェックボックスもオンになります。この投稿と他のいくつかの投稿を読みましたが、各チェックボックスの状態をブール値のリストに保存する必要があると全員が言っています getView()。どうすればそれを行うことができますか?

ありがとう。

コード用に編集:

これはアダプタのコードで、getView()メソッドも含まれています。

public class MyCustomAdapter extends BaseAdapter
{
    public ArrayList<Error> list;
    private Context mContext;
    private LayoutInflater mInflator;

    public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<Error> list)
    {
        this.list = list;
        this.mContext = context;
        mInflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

@Override
public Error getItem(int position) 
{
    return list.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;

    if(convertView == null)
    {
        holder = new ViewHolder();

        convertView = mInflator.inflate(R.layout.listviewrow, null);

        holder.text = (TextView)convertView.findViewById(R.id.text);
        holder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder)convertView.getTag();
    }

    final int pos = position;
    holder.text.setText(list.get(position).getDescription());
    holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
        {
            list.get(pos).setChecked(isChecked);
        }
    });

    return convertView;
}

static class ViewHolder
{
    TextView text;
    CheckBox checkbox;
}



}
4

4 に答える 4

0

これを使って

        ViewHolder holder;
        holder = new ViewHolder();

        convertView = mInflator.inflate(R.layout.listviewrow, null);

        holder.text = (TextView)convertView.findViewById(R.id.text);
        holder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox);

        convertView.setTag(holder);

それ以外の

 ViewHolder holder;

    if(convertView == null)
    {
        holder = new ViewHolder();

        convertView = mInflator.inflate(R.layout.listviewrow, null);

        holder.text = (TextView)convertView.findViewById(R.id.text);
        holder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder)convertView.getTag();
    }

私は同じ問題に直面しました。答えが得られるかもしれません!

于 2013-07-25T11:24:34.600 に答える
-1

それでもここで答えを探しているなら、それは行きます。Custom Adapter または Custom ListView を使用している場合は、チェックボックスのステータスを覚えておく必要があるとスタックオーバーフローでコメントされているものもあります。しかし、覚える必要はありません。ListView はそれを記憶します。そのため、実装前に以下の項目をご理解ください。

  1. ListView とアダプタとは。
  2. アダプターが getView を呼び出し、listView 内の各項目を更新する方法。
  3. 上下にスクロールするとどうなるか (listview の一部の項目が非表示になります。つまり、getView が返すもの)。
  4. ListView API を確認します。これは重要です。

上記のポイントを理解すれば、答えは非常に簡単です。ListView はすべてのステータスを記憶し、位置をパラメーターとして渡すことで isItemChecked を使用して抽出できます。

于 2016-12-24T05:23:54.707 に答える