0

ListAdapterとしてカスタムArrayAdapterを持つビューがあります。顧客はPocoです:

public class Customer {
    public String LastName;
    public boolean IsActive;
}

動作:ArrayListをListViewに正常にバインドし、LastNameがテキストとして表示され、CheckBoxがチェックされているかどうか(IsActiveによって異なります)が、チェックボックスがチェックされるたびにArrayListを更新したいのですが、できませんOnClickListenerの位置にアクセスします。

setListAdapter(new ArrayAdapter<Customer>(this, android.R.layout.simple_list_item_checked, items) {

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

        View row;
        if (null == convertView) {
            row =  mInflater.inflate(android.R.layout.simple_list_item_checked, null);
        } else {
            row = convertView;
        }

        CheckedTextView ctv = (CheckedTextView) row.findViewById(android.R.id.text1);
        ctv.setText(getItem(position).LastName);
        ctv.setChecked(getItem(position).IsChecked);

        ctv.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                CheckedTextView ctv = (CheckedTextView) v;
                ctv.toggle();

                // this does not work because I don't have the position
                getItem(position).IsChecked = (ctv).isChecked();

            }

        });

        return row;
    }

});

CheckedTextBoxから継承しsetPosition/getPosition、後で使用するために位置を保存するカスタムプロパティを追加したり、関連オブジェクトへの参照を追加したりすることを考えましたが、atmが見つからない既存のソリューションがあると思います。

4

2 に答える 2

4

ListViewを使用してonItemClickListenerを指定し、次のようなAdapterViewを渡す必要があります。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
    // here you have th view, the position, everything you need to have fun ;=)
    //you can acces the content of your adapter here with :   
    mAdapter.getItem(pos);
    }
}
于 2010-08-17T14:43:03.957 に答える
1

行ではなく、ListActivityによってクリックを処理します

public void onListItemClick(ListView l, View v, int position, long id)

それはあなたが必要とするすべてをあなたに与えます。ListActivityのメソッドをオーバーライドします。

于 2010-08-17T14:43:02.783 に答える