2013-11-28 16 views
5

をハイライト表示されませんListViewセットとして:performItemClickは、私が持っているその項目

navMenu = (ListView) findViewById(R.id.list_menu_nav); 
navMenu.setAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, 
        menuList)); 

私は項目に触れ、それは白を取得します。アダプターは以下のように設定されている

<ListView 
    android:id="@+id/list_menu_nav" 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:choiceMode="singleChoice" 
    android:listSelector="#fff"> 
</ListView> 

背景(私が設定した通り)。しかし、以下のように項目をクリックして実行すると、選択されますが、白い背景が表示されません。

navMenu.performItemClick(navMenu.getChildAt(1), 1, navMenu.getAdapter().getItemId(1)); 

私は他のすべては予想(リスナーと呼ばれ、getCheckedItemPosition戻って正しい値)として動作するので、それが選択されている知っています。

この場合、正しいアプローチは何ですか?レイアウトをカスタムレイアウトに置き換え、強調表示を自分で作成するか、同じデフォルトレイアウトを使用する方法がありますか?

+0

たぶん、あなたはクリックを実行する前に、 'invalidate'項目する必要があります。 – Naddy

+0

私はそれをテストしました。 performClickの後に 'navMenu.invalidate()'と 'navMenu.requestLayout()'も動作しません。 :\ –

+0

@EugenMartynovおそらく 'listSelector'はリストで選択されているものをマークします。あなたが言っていることに続いて、おそらくアンドロイドチームは 'listSelectorForUserClicks'のような名前に変更する必要があります。 –

答えて

1

あなたは、これに応じてちょうどTextViewを持っていますので、この動作が期待されている

。選択した状態をカスタマイズするには、項目要素の独自のレイアウトを作成する必要があります。ここを見てみましょう:

+0

あなたの答えは正しいですが、それは良くできました。私は編集しましたが、あまり変更されたために拒否されました。私は同意しませんが、スタックオーバーフロープロトコルです。 –

1

setSelectionは、あなたがする考えているものは何でもListViewかを拡張setItemCheckedperformItemClickは、ことはできません。 AbsListViewはプライベートメソッドを使用してpositionSelectorと呼ばれます。これは、他のプライベートメソッド内でのみ呼び出され、positionSelectorを呼び出す前にユーザーとのやりとりが行われていることを確認するためにチェックされます。

あなたがすることができる唯一の回避策は、タッチイベントを強制です:

View temp = navMenu.getChildAt(1); 
navMenu.onTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), 
    SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, temp.getX(), temp.getY(), 0)); 
+0

どのような魔法。エラーが返されました。しかし、私はtry catchとサラウンド..それは例外で私のために働いた.. –

関連する問題