Android 正在更新BaseAdapter的setOnCheckedChangeListener内列表中的数据
我有以下代码:Android 正在更新BaseAdapter的setOnCheckedChangeListener内列表中的数据,android,listview,oncheckedchanged,Android,Listview,Oncheckedchanged,我有以下代码: public class MyListAdapter extends BaseAdapter { private final List<MyClass> mItems = new ArrayList<MyClass>(); ... @Override public View getView(int position, View convertView, ViewGroup parent) { View rowVi
public class MyListAdapter extends BaseAdapter {
private final List<MyClass> mItems = new ArrayList<MyClass>();
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
final MyClass myItem = mItems.get(position);
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.my_item, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.cbView = (CheckBox) rowView.findViewById(R.id.cbCheckBox);
viewHolder.cbView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
myItem.setState(isChecked);
}
});
rowView.setTag(viewHolder);
}
公共类MyListAdapter扩展BaseAdapter{
private final List mItems=new ArrayList();
...
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
最终MyClass myItem=mItems.get(位置);
if(rowView==null){
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
rowView=充气机。充气(R.layout.my_项,空);
ViewHolder ViewHolder=新ViewHolder();
viewHolder.cbView=(复选框)rowView.findviewbyd(R.id.cbCheckBox);
viewHolder.cbView.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
myItem.setState(已检查);
}
});
rowView.setTag(viewHolder);
}
我对监听器感到非常不舒服。它指的是convertView为null时创建的myItem。如果我从列表中删除该项(位置更改)?或者如果我在它前面添加一些项?我的代码是否会因“null exception”而失败?或者执行不正确?
如何构建它?如果convertView为空,则只需创建视图对象。。。 现在,如果从列表的中间删除视图,则从底部向上提升视图并替换已删除视图的空间。当视图向上提升时,viewHolder对象将创建新的viewHolder对象,view hold将更新viewHolder对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
final MyClass myItem = mItems.get(position);
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.my_item, null);
}
ViewHolder viewHolder = new ViewHolder();
viewHolder.cbView = (CheckBox) rowView.findViewById(R.id.cbCheckBox);
viewHolder.cbView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
myItem.setState(isChecked);
}
});
rowView.setTag(viewHolder);
}
在哪一行出现空指针异常?我还没有得到任何异常。但我怀疑行
myItem.setState(isChecked);
。那么final MyClass myItem=mItems.get(position)呢;
?每次调用getView
时都会创建它。但是只有第一个在onCheckedChanged
中使用。是的,每次调用getView时都会创建它。但是监听器会创建一次。这意味着如果删除原始项,监听器会崩溃。