我遇到的问题是当我点击一个chekbox并使列表视图向上滚动所选复选框时更改,或者有时如果选择第一个复选框以便也选择最后一个复选框。我知道我的英语还不够好,抱歉。任何帮助表示赞赏。
import java.util.ArrayList;
import java.util.Hashtable;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
public class MyListAdapter extends BaseAdapter{
public static class ViewHolder {
public CheckBox chkb = null;
}
private LayoutInflater mInflater;
private ArrayList<MyListAdapterItem> myListAdapterItems = null;
private Hashtable<Object, Object> items = null;
private boolean selectAll = false;
private boolean readOnly = false;
public MyListAdapter(Context context, ArrayList<MyListAdapterItem> myListAdapterItems, boolean selectAll, boolean readOnly) {
mInflater = LayoutInflater.from(context);
this.myListAdapterItems = myListAdapterItems;
this.selectAll = selectAll;
this.readOnly = readOnly;
items = new Hashtable<Object, Object>();
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.chkb_fila, null);
viewHolder = new ViewHolder();
viewHolder.chkb = (CheckBox) convertView.findViewById(R.id.chkbCultivo);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
items.put(myListAdapterItems.get(position), viewHolder.chkb);
viewHolder.chkb.setText(myListAdapterItems.get(position).getDescription());
if(selectAll){
viewHolder.chkb.setChecked(true);
}
if(readOnly){
viewHolder.chkb.setEnabled(false);
}
return convertView;
}
public int getCount() {
return myListAdapterItems.size();
}
public Object getItem(int position) {
return myListAdapterItems.get(position);
}
public long getItemId(int position) {
return position;
}
/**
* @return the myListItems
*/
public ArrayList<MyListAdapterItem> getMySelectedListItems() {
ArrayList<MyListAdapterItem> listSelectedItems = new ArrayList<MyListAdapterItem>();
CheckBox tmpCheckBox = null;
for(int i=0; i<items.size(); i++){
tmpCheckBox = (CheckBox) items.get(myListAdapterItems.get(i));
if(tmpCheckBox.isChecked()){
listSelectedItems.add(myListAdapterItems.get(i));
}
}
return listSelectedItems;
}
}
答案 0 :(得分:0)
问题是getView
方法重用了视图,因此必须确保更新该方法中的复选框状态;这也意味着你必须在某个地方保存这个状态。
答案 1 :(得分:0)
以下是您正在寻找的一些链接。高级,但如果你坚持下去,不要放弃这个,你将学到很多!看看:
Android: ListView elements with multiple clickable buttons
答案 2 :(得分:0)
2个选项。
1)不要回收你的观点。总是给新人充气。这是“懒惰”,但如果您的应用没有太多条目,则不太可能引入错误。
2)确保在每个视图上设置所有内容。你正在重复使用它们,所以如果你之前已经设置了一些东西,它就会保持这种状态。
改变这个:
if(selectAll){
viewHolder.chkb.setChecked(true);
}
if(readOnly){
viewHolder.chkb.setEnabled(false);
}
到
viewHolder.chkb.setChecked(selectAll);
viewHolder.chkb.setEnabled(!readOnly);
使用if块,你没有设置布尔值的另一面(你也可以使用else块,但这更详细)。