0

左側にチェックボックスがあり、astridタスクマネージャーによく似た4つのテキストビューがあるアイテムレイアウトのカスタムリストビューがあります。 ここに画像の説明を入力してください

私がやろうとしているのは、チェックボックスをクリックすると、テキストビューが値を更新する必要があるということです。最初、私の問題は、位置1のチェックボックスをオンにすると、スクロール中に最後または他の場所のチェックボックスがチェックされることでした。解決策を探しているうちに、リストビューでのビューのリサイクルについて知りました。ビューホルダーのような概念を適用し、現在、チェックボックスの状態を維持することができます。しかし、チェックボックスをクリックすると、テキストビューが変更され、変更が持続しません。つまり、ランダムなテレビでも同じ変更が表示されます。

アダプターのclicklistenerにチェックボックスを適用しました。それを達成する方法はありますか?

4

2 に答える 2

0

ここで私の完全なコードを参照できます。できることは、チェックボックスの状態をブール配列に保存すると、この問題に直面することはありません.....

Android チェックボックスの複数選択の問題

于 2013-09-20T10:34:18.343 に答える
0

ビューホルダーではなく、アイテムデータでアイテムの状態を永続化する必要があります。ビューホルダーは、ビューをリサイクルすると仮定すると、さまざまな時点でさまざまなアイテムを表示するビューの利便性にすぎません。データ バインド中に、アイテムを表示するために必要なすべての状態をバインドして、別のリスト アイテムのビューにランダムなデータが表示されるのを回避します。

public class MyListAdapter extends BaseAdapter {

    // ....

    @Override
    View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = inflate(R.layout.my_list_item_layout, parent, false);

            // View holder just prevents having to look up these values 
            // every time the view is reused.
            MyViewHolder holder = new MyViewHolder();
            holder.checkbox = (CheckBox) view.findViewById(R.id.check_box);
            holder.textview = (TextView) view.findViewById(R.id.text_view);
            view.setTag(holder);
        }

        final MyViewHolder holder = (MyViewHolder) view.getTag();
        final MyData data = (MyData) getItem(position);
        holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                data.savedCheckboxState = isChecked;
                // now tell the view to rebind the data
                notifyDataSetChanged();
            }
        });

        holder.checkbox.setChecked(data.savedCheckboxState);
        holder.textview.setText(String.valueOf(data.savedCheckboxState));
        return view;
    }

    private static class MyViewHolder {
        CheckBox checkbox;
        TextView textview;
    }
}
于 2013-09-20T10:15:16.987 に答える