【问题标题】:Android ListView unselect itemAndroid ListView 取消选择项
【发布时间】:2016-07-26 14:41:28
【问题描述】:

我正在开发一个具有 ListView 的应用程序。在这个 ListView 中,当我触摸一个项目时,该项目的背景颜色会发生变化,以显示该项目已被选中。

不过,布局也有一个 EditText:

    <ListView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:id="@+id/pratosListView"
            android:layout_marginBottom="@dimen/activity_vertical_margin"
            android:layout_weight="0.8"/>

    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:id="@+id/quantidadeEditText"
            android:layout_marginRight="@dimen/activity_horizontal_margin"
                style="@style/EditText"/>

当我触摸 EditText 时,在 ListView 中选择的项目未被选中,换句话说,背景颜色恢复为原始颜色。我不希望这种情况发生。

这是我的选择器(list_item_selector.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/item_list_selected"/>
    <item android:state_pressed="true" android:drawable="@drawable/item_list_pressed"/>
    <item android:state_focused="true" android:drawable="@drawable/item_list_focused"/>
    <item android:drawable="@drawable/item_list_normal"/>
</selector>

这里我设置了item的背景(item_lista_pedidos.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/activity_all_magim"
    android:orientation="horizontal"
    android:weightSum="5"
    android:baselineAligned="false"
    android:background="@drawable/list_item_selector">
.....
</LinearLayout>

这里是点击监听器的实现:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // salva a posicao do item selecionado
        lastPositionSelected = position;
        // salva o objeto relativo ao item selecionado
        servicoSelected = servicos.get(position);
        view.setSelected(true);
    }

当我在 EditText 中触摸时,有人有一些想法可以避免该项目被取消选择?

【问题讨论】:

  • 如果对您有帮助,请考虑接受一个答案作为正确答案
  • 您好,感谢您的回复!但没有帮助。我用另一种方式解决了这个问题。我将 list_item_selector.xml 上的属性“state_focused”更改为“state_activated”并删除了“view.setSelected(true);”行来自 onItemClick 函数。但是,无论如何,谢谢。

标签: android listview


【解决方案1】:

here 所述,如果您只想在 EditText 之外检测外部触摸,您可以在包含视图中检测触摸事件,然后,假设您有 EditText 视图:

Rect editTextRect = new Rect();
myEditText.getHitRect(editTextRect);

if (!editTextRect.contains((int)event.getX(), (int)event.getY())) {
    //touch was outside edittext
}

或者你在 EditText 和容器中都添加了一个触摸监听器,并在 EditText 之一中返回 false,这样它将被拦截而不转发给父级。因此,您在父级侦听器中检测到的所有触摸都不属于 EditText。

【讨论】:

  • 您好,感谢您的回复!但没有帮助。我用另一种方式解决了这个问题。我在 list_item_selector.xml 上将属性“state_focused”更改为“state_activated”并删除了“view.setSelected(true);”行来自 onItemClick 函数。但是,无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
相关资源
最近更新 更多