Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

View gets its drawable state (pressed, etc...) from its parent

I have a ListView where each list item is a custom layout based on a RelativeLayout, it is clickable and it has a custom selector. En plus, it has a sub-RelativeLayout which is also clickable and it has its own selector.

Something like this:

 ---------------
|               |
|         ___   |
|        |   |  |
 ---------------

Everything works perfectly but the problem is that when I click on the parent relative layout, the child selector assumes the state of the parent selector. I tried to set

android:duplicateParentState="false"

on the child but nothing has changed.

Any idea? Thanks in advance

like image 764
gwvatieri Avatar asked Dec 05 '11 03:12

gwvatieri


1 Answers

Can you please show your code of ListView's item and selectors? To my mind you've made some mistakes, when implemented it. Here is my example of item and its selectors. It works fine for me:

Video, how my implementation works: >click to open<

list_view_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="40dp"
    android:background="@drawable/relative_selector">

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:background="@drawable/child_selector_1"
        android:clickable="true">

        <RelativeLayout
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerHorizontal="true"
            android:background="@drawable/child_selector_2"
            android:clickable="true"/>
    </RelativeLayout>
</RelativeLayout>

relative_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/holo_blue_bright" />
            </shape>
        </inset>
    </item>
</selector>

child_selector_1.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- pressed state -->
    <item android:state_pressed="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/holo_orange_dark" />
            </shape>
        </inset>
    </item>

    <!-- focused state -->
    <item android:state_focused="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/holo_orange_dark" />
            </shape>
        </inset>
    </item>

    <!-- normal state -->
    <item>
        <inset xmlns:android="http://schemas.android.com/apk/res/android">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/holo_red_dark" />
            </shape>
        </inset>
    </item>
</selector>
like image 130
TAC Avatar answered Oct 15 '22 11:10

TAC