0

我有一个带有自定义项目的列表视图,列表视图中的项目包括:文本视图和图像按钮,我已经为带有选择器的图像按钮设置了背景。我的问题是当我单击列表视图中的项目时,图像按钮更改状态为按下(单击事件未触发),我不想这样做,我希望图像按钮更改状态仅在我按下它时按下。对我有什么解决办法吗?谢谢!

项目行的布局

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:background="@drawable/song_list_selector" >

        <ToggleButton 
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:layout_alignParentLeft="true"
            android:background="@android:color/transparent"
            android:checked="true"
            android:textSize="12sp"
            android:textOn="@string/favorite"
            android:textOff="@string/favorite"
            android:textColor="@drawable/text_color_toggle_button"
            android:id="@+id/toggle_favorite"
            android:clickable="false"
            android:focusable="false"/>

        <ToggleButton 
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:layout_alignParentRight="true"
            android:background="@android:color/transparent"
            android:checked="false"
            android:textSize="12sp"
            android:textColor="@drawable/text_color_toggle_button"
            android:textOn="@string/offline"
            android:textOff="@string/online"
            android:id="@+id/toggle_offline"
            android:clickable="false"
            android:focusable="false"/>

        <ImageButton 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_menu"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:background="@drawable/bg_button_song_menu"
            android:contentDescription="@string/song_menu"
            android:id="@+id/btn_song_menu"
            android:focusable="false"/>

        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:layout_below="@id/toggle_favorite"
            android:layout_toLeftOf="@id/btn_song_menu"
            android:text="999 Doa Hong"
            android:textColor="#0e7491"
            android:textSize="20sp"
            android:id="@+id/lbl_song_name"/>

        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:text="Nhac chi chuyen xua, da xa roi nhu giac mo..."
            android:textSize="12sp"
            android:layout_below="@id/lbl_song_name"
            android:layout_toLeftOf="@id/btn_song_menu"
            android:id="@+id/lbl_song_lyric"/>

        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:drawableLeft="@drawable/ic_microphone"
            android:drawablePadding="2dp"
            android:textSize="12sp"
            android:text="1,478"
            android:layout_marginTop="5dp"
            android:layout_below="@id/lbl_song_lyric"
            android:id="@+id/lbl_sing_times"/>

        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:drawableLeft="@drawable/ic_save"
            android:drawablePadding="2dp"
            android:textSize="12sp"
            android:text="548"
            android:layout_marginTop="5dp"
            android:layout_below="@id/lbl_song_lyric"
            android:id="@+id/lbl_save_times"/>

   </RelativeLayout>

</RelativeLayout>

列表视图的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SongListActivity" >

    <ListView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="3dp"
        android:paddingBottom="3dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:divider="@null"
        android:listSelector="#00000000"
        android:cacheColorHint="#00000000"
        android:id="@+id/list_song"/>

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textStyle="italic"
        android:id="@+id/lbl_no_song"
        android:layout_centerInParent="true"
        android:visibility="gone"
        android:textColor="#b6b6b6"/>

</RelativeLayout>
4

2 回答 2

0

默认情况下,ListView 会消耗所有的触摸事件并将重复的状态传播给其子级。为了避免这种情况,您应该在 ListView 中将可聚焦属性设置为“false”。

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="false"
    android:focusableInTouchMode="false"
 />
于 2013-08-22T03:23:28.630 回答
0

这是由于 Listitem 布局中 ImageButton 的可聚焦性而发生的。

将以下行添加到 ListView 的项目布局的根布局。

android:descendantFocusability="blocksDescendants"
于 2013-08-22T03:31:43.140 回答