Android ListView中的performItemClick不';t突出显示项目
然后我将Android ListView中的performItemClick不';t突出显示项目,android,Android,然后我将列表视图设置为: <ListView android:id="@+id/list_menu_nav" android:layout_width="250dp" android:layout_height="wrap_content" android:choiceMode="singleChoice" android:listSelector="#fff"> </ListView> 我知道之所以选择它,是因为其他一切都按预期
列表视图设置为:
<ListView
android:id="@+id/list_menu_nav"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:listSelector="#fff">
</ListView>
我知道之所以选择它,是因为其他一切都按预期工作(调用了侦听器,getCheckedItemPosition
返回正确的值)
在这种情况下,正确的方法是什么?将该布局替换为自定义布局,并自行将其设置为高亮显示,或者是否有方法使用相同的默认布局?根据以下内容,您只需使用TextView
:
因此,这种行为是意料之中的。您必须为item元素创建自己的布局,以自定义选定状态。请看这里:
无法执行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 ) );
在执行单击之前,您可能需要使项目无效。我对它进行了测试。它也不起作用,navMenu.invalidate()
和navMenu.requestLayout()
执行单击后:\@据推测,EugenMartynovlistSelector
标记列表中选择的内容。按照你所说的,也许android团队应该将名称改为类似于ListSelector for UserClicks
。然后使用selector
。真神奇。它有错误返回错误。但我周围都是试捕,这对我来说是个例外。。
navMenu.performItemClick( navMenu.getChildAt( 1 ), 1, navMenu.getAdapter().getItemId( 1 ) );
View temp = navMenu.getChildAt( 1 );
navMenu.onTouchEvent( MotionEvent.obtain( SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, temp.getX(), temp.getY(), 0 ) );