【问题标题】:performItemClick in ListView doesn't highlight itemListView 中的 performItemClick 不突出显示项目
【发布时间】:2013-11-28 14:50:01
【问题描述】:

然后我将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 返回正确值)。

在这种情况下,正确的方法是什么?用自定义布局替换布局并自己制作突出显示,或者有没有使用相同默认布局的方法?

【问题讨论】:

  • 也许你需要invalidateitem才能执行点击。
  • 我测试过了。在 performClick 之后,navMenu.invalidate()navMenu.requestLayout() 也不起作用。 :\
  • @EugenMartynov 据说listSelector 标记了列表中选择的内容。按照你说的,也许android团队应该把名字改成listSelectorForUserClicks
  • 然后使用selector

标签: android


【解决方案1】:

根据这个,你刚刚TextView

所以这种行为是意料之中的。您必须为项目元素创建自己的布局以自定义选定状态。看这里:

【讨论】:

    【解决方案2】:

    setSelectionsetItemCheckedperformItemClick、扩展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 ) );
    

    【讨论】:

    • 多么神奇。它有错误返回错误。但我用 try catch 包围..它对我有用,但有例外..
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2013-11-18
    • 2013-11-05
    相关资源
    最近更新 更多