1

私はcheckedTextViewを含む単純なListViewを作成しました。

ユーザーがlistView行をクリックしたときにリスナーを追加したいのですが、

1-textViewがチェックされます。

2-リストにチェックされている別のテキストビューがある場合は、チェックを外します。

これは私が今まで書いたコードです:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ArrayList<String> mStrings = new ArrayList<String>();
        for(int i=0; i<30; i++) {
            mStrings.add("Item " + i);
        }

        setListAdapter( new MultiAdapter(this, mStrings));

        /* Configure ListView */
        ListView lv = getListView();
        lv.setOnItemClickListener(new ItemClick());
    }

    class ItemClick implements OnItemClickListener {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        }
    }

    private class MultiAdapter extends ArrayAdapter<String> {

        private ArrayList<String> mItems;

        public MultiAdapter(Context context, ArrayList<String> mStrings) {
            super(context, R.layout.list2, mStrings);
            this.mItems = mStrings;
        }

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

            View row;

            if (convertView == null)  {
                LayoutInflater inflater = getLayoutInflater();
                row = inflater.inflate(R.layout.list2, parent, false);
            } else
                row = convertView;

            CheckedTextView txt = (CheckedTextView) row.findViewById(R.id.label);

            txt.setText(mItems.get(position));

            return row;
        }
    } 

コーディングする必要のあるリスナーについて教えてください。

私を助けることができるcheckedTextViewについてのチュートリアルを見つけることができませんでした。サンプルコードやチュートリアルをご存知の場合はお知らせください。

4

2 に答える 2

5

いつでも最大1つだけチェックインしたい場合は、次のことができます:

  1. プロパティを作成int checkedItem;します。このプロパティは、現在チェックされている項目のインデックスを示します。何もチェックされていない場合は -1。
  2. ItemClickちょうどセットでcheckedItem = position。と呼び出しますgetListAdapter().notifyDataSetChanged()
  3. getView追加でtxt.setChecked(position == checkedItem)
于 2013-01-18T11:51:27.047 に答える
1

このコードを onCreate メソッドに貼り付けます

    lv.setItemChecked(yourDefCheckedPos, true);
    lv.setSelection(yourDefCheckedPos);

そしてリスナーで:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        parent.setSelection(position);
        ((ListView)parent).setItemChecked(position, true);
    }
于 2013-01-18T12:08:18.380 に答える