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_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>
4

2 に答える 2

1

異なる各位置内にある各レイアウトに id があると仮定します。これを無視しないと。ただし、そうする場合は、ビュー ID を既知の ID の 1 つと比較して、それがどのタイプのレイアウトであるかを判断することができます。かなり安い通話になるはずです。

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 に答える