我有一个自定义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。
答案 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中的方法。