2

リスト項目が別の XML レイアウトで定義されている ListActivity があります。リスト アイテムのレイアウトには、ImageView、CheckBox、TextView などが含まれます。

私が望むのは、onClick リスナーを各リスト項目の CheckBox に設定することです。それは簡単です。問題は、onClick ハンドラーがリスト内のどの位置にあるかを知る必要があることです。

convertView が膨張した後、 getView の CheckBox にリスナーをアタッチしています。getView メソッドには位置パラメーターがありますが、CheckBox の onClick ハンドラーで参照できません。理由はわかりますが、回避する方法がわかりません。

どうすればこれを達成できますか?

4

2 に答える 2

1

私は位置を取得するためにこのメソッドを作成しました:

    private int getListPosition(View v) {
        View vParent = (View)v.getParent();
        if (vParent != null) {
            ViewGroup vg = (ViewGroup)vParent.getParent();
            if (vg != null) {
                return getListView().getFirstVisiblePosition() + vg.indexOfChild(vParent);
            }
        }
        return -1;
    }

buttonViewをvパラメーターとして渡します

于 2010-09-16T21:35:07.233 に答える
0

チェックボックスのタグをその位置で設定してみることができます.onCheckedChangeListenerが起動されたら、チェックボックスのタグを取得してその位置を取得します..

ここにサンプルコードがありますが、試していません

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

// grab view
View v = convertView;
// set view layout
if (v == null) {
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.layout_inbox_item, null);

    CheckBox box = (CheckBox)v.findViewById(R.id.inbox_itemcheck);
    if (box != null) {
        box.setTag(position); //<-- sets the tag by its position
        box.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int position = (Integer)buttonView.getTag(); //<-- get the position
                }
            });
    }
}
于 2010-08-13T01:30:07.480 に答える