【发布时间】: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);
}
}
}
【问题讨论】: