PerformItemClick в ListView не выделяет элемент

Тогда у меня есть ListView как:

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

Адаптер установлен как:

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

Когда я касаюсь предмета, он получает белый фон (как я установил). Но, когда я выполняюClick для элемента, как показано ниже, он выбирается, но не получает белый фон.

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

Я знаю, что он выбран, потому что все остальное работает как ожидалось ( getCheckedItemPosition , getCheckedItemPosition возвращает правильное значение).

Каков правильный подход в этом случае? Замените макет для пользовательского и сделайте сам выделение или есть способ, используя тот же макет по умолчанию?

У вас есть только TextView соответствии с этим:

Поэтому такое поведение ожидается. Вы должны создать собственный макет элемента элемента для настройки выбранного состояния. Посмотрите здесь:

  • Android – изменение цвета текста при изменении состояния
  • TextView state_pressed / state_focused / state_selected изменение стиля

setSelection , setItemChecked , performItemClick , расширяющий ListView или все, что вы думаете сделать, невозможно . AbsListView использует частный метод, чтобы сделать это с именем positionSelector . Это называется только внутри частных методов и проверяется, чтобы убедиться, что было взаимодействие с пользователем, прежде чем вызвать positionSelector.

Единственным обходным решением, которое вы можете сделать, является принудительное событие:

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