Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在更新BaseAdapter的setOnCheckedChangeListener内列表中的数据_Android_Listview_Oncheckedchanged - Fatal编程技术网

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时都会创建它。但是监听器会创建一次。这意味着如果删除原始项,监听器会崩溃。