我有一个列表视图,每行有两种可能的布局。
在为每一行实现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>
答案 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
}
}
});