【问题标题】:Views created by addView method change their backgrounds togheter when pressedaddView 方法创建的视图在按下时会改变它们的背景
【发布时间】:2014-01-06 11:32:31
【问题描述】:

下面的代码是关于制作自定义列表视图,适配器为每个项目创建一个视图“list_view_child”,在getView方法中有一个for循环组成3个重复,在这个for循环中我们添加3个新视图“list_item” “list_items_container”使用方法 addView(View v),“list_item”有一个选择器来改变“list_item”视图的背景,这就是问题所在。 如果我点击其中一个视图,它们的背景会一起改变。

显示这些图像以更好地理解问题:

Pressed_false : http://i44.tinypic.com/2jfaqzb.png

Pressed_true(如果“项目 2 和视图:1”或“项目 2 和视图:2”或“项目 2 和视图:3”被按下):http://i42.tinypic.com/2l97ayw.png

list_view_child XML 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#d2d2d2"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/child_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:color="#ff0000"
        android:text="Test" />

    <LinearLayout
        android:id="@+id/list_items_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>

</LinearLayout>

list_item XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="3dp"
    android:orientation="horizontal"
    android:background="@drawable/selector"
    android:layout_marginTop="5dp" >
    <TextView
        android:id="@+id/item_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:color="#ffff00" />

</LinearLayout>

选择器:

<?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/pressed_true" />
    <item android:state_pressed="false" android:drawable="@drawable/pressed_false" />
</selector>

pressed_true :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#000000" />
</shape>

pressed_false :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#0000ff" />
</shape>

列表视图适配器类:

public class ListViewAdapter extends BaseAdapter {

    private Activity activity;
    private HashMap<String, String> data;

    public ListViewAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi=convertView;

        HashMap<String, String> datapos = new HashMap<String, String>();
        datapos = data.get(position);

        LinearLayout listitemcontainer = (LinearLayout) vi.findViewById(R.id.list_item_container);

        for (int i = 1; i <= 3; i++) {
            View listitem = inflater.inflate(R.layout.list_item, null);
            TextView itemtitle = (TextView) listitem.findViewById(R.id.item_title);
            itemtitle.setText("Item : " + position + " & View : " + i);

            LinearLayout.LayoutParams listitemparams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

            listitemparams.setMargins(0, 15, 22, 0);
            listitem.setLayoutParams(listitemparams);

            listitemcontainer.addView(listitem);
        }
    }
}

【问题讨论】:

    标签: android listview


    【解决方案1】:

    如果您的视图没有点击监听器,默认情况下它们将采用其父级的选择状态。为防止这种情况,您可以在 list_item 上使用此属性:

    android:duplicateParentState="false"

    【讨论】:

    • 我已将点击侦听器设置为“list_item”视图,问题已解决 :) 谢谢
    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多