我有一个ListActivity,其中列表项在另一个XML布局中定义。列表项布局包含ImageView,CheckBox,TextView等。
我想要的是在每个列表项中为CheckBox设置onClick侦听器。这很容易。麻烦的是我需要onClick处理程序来知道列表中的哪个位置。
在convertView被夸大之后,我将侦听器附加到getView中的CheckBox。 getView方法有一个位置参数,但我无法在我的CheckBox的onClick处理程序中引用它。我理解为什么,但我不知道如何绕过它。
我如何做到这一点?
答案 0 :(得分: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参数传递
答案 1 :(得分: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
}
});
}
}