在ListView中获取位置

8

我使用ListView来展示多个项目。 我的row.xml如下:

<TextView android:text="text"
android:id="@+id/tvViewRow"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<Button android:text="Click me!"
android:id="@+id/BtnToClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="myClick">
</Button>

我在Activity中定义了myClick如下:

public void myClick (View v) {
LinearLayout vwParentRow = (LinearLayout)v.getParent();
//How to get the position
}

如何确定所要点击的按钮的位置?
这里的位置指的是onListItemClick方法中的位置。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
}

这个问题以前已经被问过了,请在发布问题之前查找答案。 - JoxTraex
5个回答

35

尝试

public void DetailClick(View v) {
ListView lv = getListView();
int position = lv.getPositionForView(v);
}

1
非常感谢您!为什么这些信息如此难以获取? - user1862770

5
你可以试试这样做。
步骤1:在你的自定义适配器中。
@Override
public view getView(int position, View convertView, ViewGroup parent){
.......//Perform your logic
    convertView.findViewById(R.id.BtnToClick).setTag(position);
    return convertView;
}

步骤二:在单击监听器中。
 public void myClick (View v) {
     LinearLayout vwParentRow = (LinearLayout)v.getParent();
     position=(Integer) v.getTag();
  }

完美的解决方案!谢谢! - Nick

1

是的,在onListItemClick中的位置与列表中所点击项的位置相同。


我的意思是如何在myClick方法中获取位置。 - brian

1
如果我正确理解了您的问题,您在ListView的每一行中都有一个按钮,并且您想知道哪一行接收了按钮点击。您如何在按钮上执行setOnClickListener()?我问这个问题的原因是 - 如果您为每个按钮设置OnClickListener,则已经知道该按钮的位置。

我已经在xml中设置了onClick="myClick"。 - brian
翻译:定义一个新的myClick方法 - brian

1

你还应该阅读ListView的文档,甚至浏览可用方法及其示例代码。

了解你的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接