1

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

在为每一行实现我的 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_aR.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>
4

2 回答 2

1

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

我相信你应该可以给它一个ID。

于 2012-11-10T08:07:02.650 回答
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
    }
}

});

于 2012-11-10T17:30:13.193 回答