0

我在列表视图项中设置单击事件时遇到问题。

这是列表在默认情况下的显示方式:

在此处输入图像描述

这是我按下红色图像时的样子(红色变成蓝色): 在此处输入图像描述

这是当我按下列表项时: 在此处输入图像描述

如您所见,即使我没有按下按钮,红色图像也会变成蓝色。我想要的是,当我按下列表项时,红色图像没有变化,并且保持不变。

我试图android:drawSelectorOnTop="true"在 listview 部分添加到 xml 文件,但它没有用。我也尝试使用选择器参数修复它,但仍然没有成功。

我上传了一些代码,接下来的部分在不同的 xml 文件中,所以不要混淆。

编辑:我想使用 OS 项目列表背景颜色而不是我自己的颜色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>

任何帮助都会很棒,谢谢。

4

6 回答 6

4

我也遇到了这个问题,我用这里的技术解决了:

http://android.cyrilmottier.com/?p=525

看“不要按所有东西!”这一段。

于 2012-04-23T18:24:08.183 回答
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"
   />

更新

使您的按钮的直接父级不可点击,即android:clickable="false"在 row.xml 中添加它,看看是否能解决问题。现在点击项目不会改变按钮状态。但是我猜点击按钮应该仍然有效。

更新

        <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"/>
于 2012-04-21T10:44:51.863 回答
1

我之前找到了这个解决方案。我没有链接,但你必须这样做。为包含您的按钮的线性布局创建一个自定义类,然后覆盖 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中的线性布局,它不能接收新闻操作

编辑:对不起,我刚刚看到你正在使用RelativeLayout ..但我想那是一样的。

于 2012-04-23T18:36:00.483 回答
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>
于 2012-04-18T06:16:21.137 回答
0

行。首先很抱歉回复晚了。

在继续解决方案之前,让我们看看我从你的问题中得到了什么。

您想要的是,当您单击列表项时,红色图像不会转换为蓝色,如果用户单击红色图像,则它应该转换为红色。但不是整个列表项对吗???

如果是这样,那就没有什么可做的了。

不要放置选择器。选择器基本上适用于,只要您想在单击该特定视图时更改背景颜色。

是的,如果您想在用户单击它时更改 RedImage 的颜色,那么再次不要在那里使用选择器。但只需在运行时更改该图像的颜色。

就像:

@Override 
        public void onClick(View view) { 
                 YOUR_VIEW.setBackgroundColor(0xffff0000);

        } 

希望它会帮助你。如果它不能按您的意愿工作,请告诉我。

我愿意帮助你。

享受。:)

于 2012-04-21T06:10:16.150 回答
0

你用什么来连接列表一个simpleAdapter。要完成您所说的,需要一个扩展 BaseAdapter 的新类并更改该类的 getView 事件的背景图像。

然后在您的主要活动上,您可以设置一个 onlistItemClick 来处理列表项的点击事件。

于 2012-04-23T12:16:04.643 回答