查找列表视图中单击的行

时间:2012-11-10 03:55:52

标签: java android listview onclick

我有一个列表视图,每行有两种可能的布局。

在为每一行实现onClick侦听器时,我正在尝试找出最有效的方法来确定单击哪种类型的行,以便从中获取数据。

有比这更有效的方法吗?我想访问getItemViewType(position)函数,但我无法从parent

成功访问它
// listening to single list item on click
myListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // selected item's TextView
        // if the first view is null, it must be the other kind
        TextView tView = null;
        if(view.getId() == R.list.layout_a) tView = (TextView) view.findViewById(R.list.text_a);
          else tView = (TextView) view.findViewById(R.list.text_b);

        //DO STUFF AND LAUNCH ACTIVITY
    }
});

布局 - 这是一个过于简化的示例,但我需要知道点击的行是使用R.list.text_a还是R.list.text_b。我可以为根LinearLayout提供android:id=属性吗?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+list/layout_a"
android:layout_width="fill_parent"
android:layout_height="100dip" 

    <TextView
        android:id="@+list/text_a"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18dip" />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+list/layout_b"
android:layout_width="fill_parent"
android:layout_height="100dip" 

    <TextView
        android:id="@+list/text_b"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18dip" />
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

我将假设您在每个位置不同的每个布局上都有ID。如果你不忽视这一点。但是,如果您这样做,您可以将视图ID与您知道的ID之一进行比较,并确定它的布局类型。应该是一个相当便宜的电话。

我相信你应该能够给它一个身份证。

答案 1 :(得分:1)

在xml中,设置视图标记:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+list/layout_a"
android:layout_width="fill_parent"
android:layout_height="100dip" 
android:tag="a"    // Here is important part!

    <TextView
        android:id="@+list/text_a"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18dip" />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+list/layout_b"
android:layout_width="fill_parent"
android:layout_height="100dip" 
android:tag="b"    // Here is important part!

    <TextView
        android:id="@+list/text_b"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18dip" />
</LinearLayout>

在您的代码中:

myListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    if(view.getTag().toString().equals("a")) {
          // Do whatever you need to do with layout a
    } else if(view.getTag().toString().equals("b")) {
          // Do whatever you need to do with layout b
    }
}

});