android如何不在行中标记某些视图,而不是在listview中标记行本身

时间:2011-07-28 13:42:09

标签: android listview layout android-listview android-linearlayout

我有一个列表视图,其中每行包含复选框水平linearLayout 右侧的复选框。线性布局的背景是可绘制的,布局本身包含两个 textViews 并排(大文本和小文本 - 有时它隐藏起来):

this is how each row looks like:

我想要的是当有人点击一行时,复选框会翻转其状态,而确实如此。 我从不希望行本身改变颜色,但是,现在发生的是当我点击LinearLayout(包含textViews)时,行本身和线性布局将颜色更改为橙​​色,

when i click a row

但我只希望使用带有textViews的linearLayout来改变它的颜色。 我设法使用带有可擦除背景的TextView来完成它,但这里必须是LinearLayout,因为它必须包含两个textViews。

所以我的问题是,我如何制作这个heppen,这意味着当有人点击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 :(得分:0)

您需要覆盖SimpleCursorAdapter的bindView:

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
        }); 
    }
}

答案 1 :(得分:0)

使用类似的状态列表设置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>