我有一个包含按钮的自定义行的listView,我使用自定义cursorAdapter填充listView。我已经为按钮设置了一个选择器,可以在按下时更改它的背景,当我按下按钮时它会很好用。问题是,当我按下行上的任何其他位置时,它也有效。
我尝试将父视图的.setPressed,.setSelected,.setFocusable,.setFocusableInTouchMode,.setClickable属性设置为false,但它不起作用。
我也尝试将按钮的.setDuplicateParentStateEnabled设置为false,但它也没有帮助。
如果你能帮助我,我将不胜感激,
提前谢谢
让我扩展一下我的问题:我首先没有按钮的行(在下面的xml代码中是id为“delete_button”的TextView)。当我单击视图中的另一个按钮时,删除按钮滑入行,另一个TextView(id:list_title_text)的背景变为常量颜色(因为我不希望它再被点击)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/title_rows_relativelayout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/list_title_text"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:textSize="25dp"
android:textColor="@android:color/white"
android:layout_alignParentRight="true"
android:background="@drawable/selector_for_list_rows"
android:paddingLeft="15dp"
android:paddingBottom="5dp"
android:paddingRight="15dp"
android:gravity="center_vertical"
android:typeface="normal" />
</TextView>
<TextView
android:id="@+id/delete_button"
android:background="@drawable/selector_for_delete_button"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:textSize="23dp"
android:textColor="@android:color/white"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center"
android:layout_alignTop="@+id/row_icon_background"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp">
</TextView>
</RelativeLayout>
答案 0 :(得分:0)
我通过在我的自定义ListAdapter中将按钮的setFocusable属性设置为true来解决这个问题(我在编写问题后将CursorAdapter更改为ListAdapter但我确信它也适用于CursorAdapter)。现在按钮背景只有在我点击按钮时才会改变,当我点击其他地方时没有任何反应。
答案 1 :(得分:0)
分别按ViewGroup.dispatchSetSelected()
,.dispatchSetPressed()
和.dispatchSetActivated()
对儿童明确设置选定,按下和激活,无论孩子的DUPLICATE_PARENT_STATE
值如何。使用no-ops覆盖父级中的那些方法以禁用这些行为。
默认情况下,焦点和按下将分别向下传播到不可聚焦或可点击的子节点。在我的情况下,将适当的儿童标记为可聚焦或可点击的更准确,而不是setDuplicateParentState(false)
(这已经是View类的默认值)。
对我来说,我发现setDuplicateParentStateEnabled()
是一只红鲱鱼,没有它就能解决我的问题。