我在列表视图项中设置click事件时遇到问题。
这是默认情况下列表的显示方式:
按下红色图像(红色变为蓝色)时的外观如下:
这是我按下列表项的时候:
如您所见,红色图像也变为蓝色,即使我没有按下按钮。我想要的是,当我按下列表项时,红色图像没有变化,并且它保持不变。
我尝试将android:drawSelectorOnTop="true"
添加到listview部分的xml文件中,但它不起作用。我也尝试使用选择器参数修复它,但仍然没有成功。
我上传了一些代码,接下来的部分是在不同的xml文件中,所以不要混淆。
编辑:我想使用操作系统项目列表背景颜色,而不是我自己的颜色android:listSelector
,因为我已经使用过。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/blue" />
<item android:drawable="@color/red"/>
</selector>
-----------------------新文件---------------------- ----------
<ListView android:id="@+id/list_theme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_above="@id/contbtn_themelist"
android:stackFromBottom="false"
android:transcriptMode="disabled"/>
-----------------------新文件---------------------- ----------
<RelativeLayout android:id="@+id/edit_back"
android:layout_width="80dp"
android:layout_height="77dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:background="@drawable/edit_skin_selector2" >
<ImageView
android:id="@+id/skinEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@android:drawable/ic_menu_edit"
android:layout_centerInParent="true" />
</RelativeLayout>
编辑: row.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:paddingBottom="5dip"
android:paddingLeft="2dip"
android:paddingRight="2dip"
android:paddingTop="5dip" >
<ImageView
android:id="@+id/itemlist_checkedd"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/ic_checkitem" />
<ImageView
android:id="@+id/skinpreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/itemlist_checkedd"
android:scaleType="fitXY" />
<RelativeLayout android:id="@+id/edit_back"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/edit_skin_selector2"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<ImageView
android:id="@+id/skinEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@android:drawable/ic_menu_edit"
android:layout_centerInParent="true" />
</RelativeLayout>
<ImageView
android:id="@+id/separator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="5dip"
android:layout_toLeftOf="@id/edit_back"
android:src="@drawable/separator" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="2dip"
android:layout_marginRight="15dip"
android:layout_toLeftOf="@id/separator"
android:layout_toRightOf="@id/skinpreview"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
任何帮助都会很棒,谢谢。
答案 0 :(得分:4)
答案 1 :(得分:1)
您应该尝试使用android:duplicateParentState="false"
表示不要将父级的可绘制状态用于其子级。
<ImageView
android:id="@+id/skinEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@android:drawable/ic_menu_edit"
android:layout_centerInParent="true"
android:duplicateParentState="false"
/>
使您的按钮的直接父级不可点击,即在row.xml中向其添加android:clickable="false"
,看看是否能解决问题。现在点击项目不会改变按钮状态。但点击按钮仍然可以正常工作。
<ImageButton
android:id="@+id/skinEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@android:drawable/ic_menu_edit"
android:scaleType="center"
android:background="@android:drawable/state_redblue_drawable"
android:padding=10dp
android:clickable="true"/>
答案 2 :(得分:1)
之前我找到了这个解决方案..我没有链接,但你必须这样做。为包含你的botton的linearlayout创建一个自定义类,然后覆盖setPressed状态,不做任何事情;
public class UnpresseableLinearLayout extends LinearLayout
{
public UnpresseableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setPressed(boolean pressed)
{
// Do nothing here. Specifically, do not propagate this message along
// to our children so they do not incorrectly display a pressed state
// just because one of their ancestors got pressed.
}
}
这将解决问题,因为android:duplicateParentState =“false”在这种情况下不起作用。
将xml中的linearlayout替换为无法接收按下操作的xml
编辑: 对不起,我刚刚看到你正在使用RelativeLayout ..但我认为这是相同的。
答案 3 :(得分:0)
尝试使imageView可点击......
<ImageView
android:id="@+id/skinEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:scaleType="fitXY"
android:src="@android:drawable/ic_menu_edit"
android:layout_centerInParent="true"
android:focussable="false"
android:focussableInTouchMode="false"
android:clickable="true" />
或..
将选择器状态更改为
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/blue" />
<item android:drawable="@color/red"/>
</selector>
答案 4 :(得分:0)
确定。首先对不起,迟到的回复。
在继续解决之前,让我们看看你从问题中得到了什么。
你想要的是,当你点击列表项时,那个红色图像不会转换为蓝色,如果用户点击红色图像,那么它应该转换为红色。但不是整个列表 - 项目正确???
如果是这样,那么就没有什么可以做的了。
不要放选择器。当您单击特定视图时想要更改背景颜色时,选择器基本上是用于。
是的,如果你想在用户点击它时改变RedImage的颜色,那么再次不要在那里使用选择器。但只需在运行时更改该图像的颜色。
如:
@Override
public void onClick(View view) {
YOUR_VIEW.setBackgroundColor(0xffff0000);
}
希望它会对你有所帮助。如果它不能像你想要的那样工作那么请告诉我。
我想帮助你。
享受:)
答案 5 :(得分:0)
您使用什么来连接listAdapter列表。要完成你所说的内容,需要一个扩展BaseAdapter的新类,并在该类的getView事件上更改背景图像。
然后在您的主要活动上,您可以设置onlistItemClick来处理列表项的点击事件。