Android如何从onClick Handler()获取ListView中行的位置

时间:2010-08-17 14:37:42

标签: android listview android-arrayadapter

我有一个自定义ArrayAdapter作为ListAdapter的视图。 客户是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。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

我会处理点击而不是行,而是处理ListActivity

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

为您提供所需的一切。覆盖ListActivity中的方法。