我实现了一个包含三列的ListView,第一列是Textview,第二列是TextView,第三列是CheckBox。
一切都很好,它在我想要的布局文件中完全显示。
但我面临的两个问题
1)当我滚动屏幕时,自动替换checkBox选中或取消选中状态,以显示完整列表。
2)listview.setOnItemClickListener(new OnItemClickListener(){}),此函数未调用。
我想点击listView
中任何一项的复选框然后有一个按钮提交列表视图的所有已检查状态,我该怎么做
listview=(ListView)findViewById(R.id.listview);
// create the grid item mapping
String[] from = new String[] {"col_1","col_2"};
int[] to = new int[] { R.id.txtnameItem, R.id.txtpriceItem};
// prepare the list of all records
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
for(int i = 0; i <items.length; i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("col_1",items[i]);
map.put("col_2",price[i]);
fillMaps.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(this, fillMaps, R.layout.item, from, to);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parentView, View v, int position,long id)
{
Log.d("Inside onClilck log","Yes");
Toast.makeText(v.getContext(),""+position,Toast.LENGTH_LONG).show();
}
});
item.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:background="#FFFFFF"
android:layout_height="fill_parent">
<LinearLayout
android:layout_margin="15dip"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="#FFFFFF"
android:orientation="horizontal"
android:id="@+id/linearLayout1">
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_gravity="center"
android:padding="5dip"
android:paddingRight="0dip"
android:id="@+id/linearLayout2">
<TextView
android:id="@+id/txtnameItem"
android:textSize="20px"
android:textStyle="bold"
android:text="col_1"
android:gravity="left"
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:textStyle="bold"
android:id="@+id/linearLayout2">
<TextView
android:id="@+id/txtpriceItem"
android:gravity="left"
android:layout_gravity="center"
android:text="col_2"
android:layout_weight="1"
android:textSize="20px"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<CheckBox
android:gravity="right"
android:layout_weight="1"
android:text=""
android:textColor="#000000"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="right|center"
android:checked="false"
android:id="@+id/chkboxItem">
</CheckBox>
</LinearLayout>
</LinearLayout>
</LinearLayout>
最后是main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<!-- Header -->
<LinearLayout android:id="@+id/header"
android:background="#FFFFFF"
android:padding="10dip"
android:orientation="horizontal"
android:paddingBottom="5dip"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
>
<TextView android:id="@+id/heading"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Items"
android:gravity="left"
android:layout_weight="1"
android:textColor="#CC6633"
android:textSize="25px"
android:textStyle="bold"
/>
<Button
android:text="Add To Order"
android:id="@+id/btnOrder"
android:layout_weight="1"
android:textSize="15px"
android:gravity="right"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
<LinearLayout android:id="@+id/header"
android:background="#FFFFFF"
android:padding="5dip"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
>
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_gravity="center"
android:padding="5dip"
android:id="@+id/linearLayout2">
<TextView
android:id="@+id/txtnameItem"
android:text="Name"
android:gravity="left"
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1"
android:padding="5dip"
android:gravity="left"
android:id="@+id/linearLayout2">
<TextView
android:id="@+id/txtpriceItem"
android:gravity="left"
android:text="Price"
android:layout_weight="1"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="left">
</TextView>
<TextView
android:id="@+id/txtorderItem"
android:gravity="right"
android:text="Order"
android:layout_weight="1"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right">
</TextView>
</LinearLayout>
</LinearLayout>
<!-- List Divider -->
<View android:layout_width="fill_parent"
android:layout_height="5dip"
android:background="#C85A17" />
<!-- ListView (list_items) -->
<LinearLayout android:id="@+id/layout"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<ListView android:id="@+id/listview"
android:layout_height="wrap_content"
android:clickable="true"
android:layout_width="fill_parent">
</ListView>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:1)
我建议不要将它变成一个简单的配置器,使它成为从Base Adapter扩展的定制适配器。
然后在listview.setOnItemClickListener中连续更改复选框的状态(开/关),并通过适配器调用notifyDataSetChanged()。