2

我有一个 ListActivity,其中列表项是在另一个 XML 布局中定义的。列表项布局包含一个 ImageView、一个 CheckBox、一个 TextView 等。

我想要的是为每个列表项中的 CheckBox 设置一个 onClick 侦听器。这很容易。问题是我需要那个 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 回答