2

ArrayAdapter から ListView を作成します。ListView の各行には、ImageView と TextView があります。setOnItemClickListener を使用してクリックされたイベントを処理するようになりました

lv = getListView();
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            CategoryInfo cat = (CategoryInfo) lv
                    .getItemAtPosition(position);
            showGameByCategory(Long.valueOf(cat.getId()), cat.getName());
        }
    });

行をクリックすると、別のアクティビティが開始されます。そのアクティビティには、ListView に戻るボタンがあります。そのボタンをクリックすると、 が呼び出されますActivity.finish();

ここに問題があります。初めて ListView を開いて項目をクリックすると、正常に動作し、新しいアクティビティが開きます。しかし、ボタンをクリックしてListViewに戻ると、アイテムをクリックできません。私のアプリには多くのタブがあります。別のタブに切り替えて ListView に戻ると、ListView アイテムをもう一度クリックできます。しかし、ボタンをクリックすると、アイテムはクリックできなくなります。

2 つの異なる OS でテストし、Android 2.3 では正常に動作しますが、このエラーは Android 4.0 で発生しました。

これを修正する方法を知っている人はいますか?

編集:これは私のレイアウトファイルです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/listitem_selector_odd"
    android:padding="6dip" >

    <RelativeLayout
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/avatar"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginRight="6dip" 
            android:layout_alignParentLeft="true"/>

        <TextView
            android:id="@+id/toptext"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/avatar"
            android:layout_marginRight="6dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:textColor="#000000"
            android:textSize="18dp"
            android:textStyle="bold" >
        </TextView>

        <ImageView
            android:id="@+id/arrow"
            android:layout_width="10dip"
            android:layout_height="15dip"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="6dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:src="@drawable/arrow_icon" />
    </RelativeLayout>

</LinearLayout>
4

3 に答える 3

1

私はあなたとまったく同じ問題を抱えていました。さらに奇妙なことに、一部のタブレット 4.0 または 4.1 では発生しましたが、電話 4.1 では発生しませんでした。「descendentFocusabilty=blocksDescendants」を使用しても解決しませんでした。

user1603602 のアイデアに従って、ビューが表示されるたびに、リストのビューの無効化 (したがって、リストの要素の再描画) を要求します。

@Override
protected void onWindowVisibilityChanged(int visibility) {
    super.onWindowVisibilityChanged(visibility);
    if (visibility == View.VISIBLE) {
        list.invalidateViews();
    }
}

リストの各項目をリロードするので、例えばアニメーション付きの画像をロードすると煩わしいかもしれませんが、問題を解決し、スクロールした位置を維持します。

于 2013-08-30T12:14:48.550 に答える
0

私は同じ問題を抱えていて、それを解決する方法を見つけました。リストビューを削除してから、再度追加します。これにより、ビューが強制的に元の作業状態に更新されます。

たとえば、あなたListView lvLinearLayout lout

 lout.removeView(lv);
 lout.addView(lv);

これを UI スレッドから呼び出すようにしてください。

于 2012-08-16T14:52:47.657 に答える