Android, как не отметить определенный вид в строке, но не саму строку в списке - PullRequest
1 голос
/ 28 июля 2011

У меня есть список , в котором каждая строка содержит флажок и горизонтальный linearLayout справа от флажка. фон линейного макета является отрисовываемым, а сам макет содержит два textViews рядом (большой текст и мелкий текст - иногда он скрыт):

this is how each row looks like:

Что я хочу, чтобы, когда кто-то нажимал на строку, флажок отображал свой статус, и это происходит. Я никогда не хочу, чтобы сама строка меняла цвет, однако теперь происходит то, что, когда я нажимаю на LinearLayout (который содержит textViews), сама строка и линейный макет изменяют цвет на оранжевый,

when i click a row

но я хочу, чтобы только linearLayout с textViews изменил свой цвет. Мне удалось сделать это с TextView с фоном drwable, но здесь это должен быть LinearLayout, потому что он должен содержать два textViews.

поэтому мой вопрос, как мне сделать это, то есть, когда кто-то нажимает на linearLayout, то LinearLayout изменит свой цвет на оранжевый, без линии, чтобы изменить его цвет ?? Спасибо!

вот мой row.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout 
    android:id="@+id/LinearLayout11" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent">
    <CheckBox 
        android:paddingLeft="6dp" 
        android:button="@drawable/custom_checkbox" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:checked="true" 
        android:focusable="false" 
        android:id="@+id/interest_checkbox">
    </CheckBox>
    <LinearLayout 
        android:gravity="center_vertical" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:id="@+id/LinearLayout12" 
        android:layout_gravity="center_horizontal" 
        android:paddingLeft="6dp" 
        android:weightSum="1" 
        android:paddingRight="6dp" 
        android:layout_marginRight="6dp" 
        android:background="@drawable/row_state">
        <TextView 
            android:layout_height="wrap_content" 
            android:textColor="@android:color/black" 
            android:textAppearance="?android:attr/textAppearanceMedium" 
            android:layout_width="0dp" 
            android:layout_weight="1" 
            android:id="@+id/interest_summary" android:text="Big Text">
        </TextView>
        <TextView 
            android:layout_height="wrap_content" 
            android:textColor="@color/back" 
            android:gravity="left" 
            android:textAppearance="?android:attr/textAppearanceSmall" 
            android:layout_width="0dp" 
            android:id="@+id/TextView11" 
            android:layout_weight="1" 
            android:text="small text">
        </TextView>
    </LinearLayout>
</LinearLayout>

и вот row_state.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@drawable/row_clicked" 
        /> <!-- pressed -->    
    <item 
        android:state_focused="true"
        android:drawable="@android:drawable/editbox_background_normal" 
        /> <!-- focused -->    
    <item 
        android:drawable="@drawable/row" 
        /> <!-- default -->
</selector>

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

установить фон CheckBox тоже с подобным списком состояний .. точно так же, как row_state.xml, и, вероятно, вы можете сделать это ..

<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@drawable//*default checkBox color*/" 
        /> <!-- pressed -->    
    <item 
        android:state_focused="false"
         android:drawable="@drawable//*default checkBox color*/" 
        /> <!-- focused -->    
    <item 
         android:drawable="@drawable//*default checkBox color*/" 
        /> <!-- default -->
</selector>
0 голосов
/ 28 июля 2011

Вам необходимо переопределить bindView вашего SimpleCursorAdapter:

SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(...) {
    public void bindView(View view, android.content.Context context, Cursor cursor) {
        final LinearLayout layout = view.findViewById(R.id.somelinearlayout);

        // Add an onclick handler to the LinearLayout
        layout.setOnClickListener(new OnClickListener() {
            // Add click handler that alters the background
        }); 
    }
}
...