我在一个由 SimpleAdapter 填充的 Activity(不是 ListActivity)中有一个 ListView。
public void updateGroupsInfoPane(){
final ListView m_listview3 = (ListView) findViewById(R.id.memberOfList);
mapMemberOfList.clear();
for (String group : arrayAccountMemberOfList) {
Map<String, Object> datum = new HashMap<String, Object>(2);
String[] tempString = group.split(",");
datum.put("groupname", tempString[0]);
datum.put("groupdesc", tempString[1]);
mapMemberOfList.add(datum);
}
SimpleAdapter adapter = new SimpleAdapter(this, mapMemberOfList, R.layout.membersof_list, new String[] {"groupname", "groupdesc"}, new int[] {android.R.id.text1, android.R.id.text2});
m_listview3.setAdapter(adapter);
m_listview3.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE);
m_listview3.setTextFilterEnabled(true);
m_listview3.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox box = (CheckBox) view.findViewById(R.id.checkbox);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
String tempString = text1.getText().toString();
if (box.isChecked()){
box.setChecked(false);
listCurrentMembership.remove(tempString);
}else{
box.setChecked(true);
listCurrentMembership.add(tempString);
};
}
});
}
这工作正常。问题是当我滚动此列表时,复选框一旦离开屏幕就不会重新检查正确的复选框,然后检查下一个滚动上的项目。当我将数据加载到不同的数组中时,数据是正确的。只是复选框图形是错误的。如果我不滚动,检查和取消检查会添加和删除正确的数据。
围绕这个搜索是因为回收ListView,我需要实现一个getView。
我一直在寻找一些关于如何使用 SimpleAdapter 的示例,因为一些帖子说 SimpleAdapter 已经完成了 getView,而其他示例则使用了 ListActivity。那么我如何检查框只是通过点击 ListView 项目,而不是复选框本身可能与它有关?但是我找不到一个与我正在做的事情相似的例子,以便我可以玩弄并解决这个问题。
我的 ListView 'membersof_list' 中的项目的 XML 是:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vw1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:focusable="false"
android:clickable="false"
android:checked="false" />
<LinearLayout
android:id="@+id/ll1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="?android:attr/listPreferredItemPaddingLeft"
android:layout_marginTop="8dip"
android:ellipsize="end"
android:textSize="8sp"
android:textStyle="bold"
android:singleLine="true"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/ll1"
>
<TextView android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="?android:attr/listPreferredItemPaddingLeft"
android:ellipsize="end"
android:textSize="6sp"
android:singleLine="true"
/>
</LinearLayout>
我只有一个数据数组,我清空了与 ListView 关联的数组,因为我确实需要在加载新的/不同的数据之前清除它,我在逗号处拆分数据以将其加载到 groupname 和 groupdesc 中。默认情况下,复选框都未选中,这就是它应该的样子。
我是 Android 编程的新手,我知道它不是最干净或最有效的代码,但一旦它开始工作,我计划重新审视它并让它变得更好。
任何建议、链接、示例都是有价值的。谢谢。