然后我将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 ) );
当我触摸某个项目时,它会变成白色背景(正如我设置的那样)。但是,当我执行如下所示的项目时,它被选中但没有获得白色背景。
navMenu.performItemClick( navMenu.getChildAt( 1 ), 1, navMenu.getAdapter().getItemId( 1 ) );
我知道它已被选中,因为其他所有内容都按预期工作(名为getCheckedItemPosition
的侦听器返回正确的值)。
在这种情况下,正确的方法是什么?将布局替换为自定义布局并自行制作高亮度或使用相同默认布局的方式?
答案 0 :(得分:1)
根据这一点你只有TextView
:
所以这种行为是预料之中的。您必须为item元素创建自己的布局以自定义选定的状态。看看这里:
答案 1 :(得分:1)
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 ) );