Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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 如何从自定义Listview中删除项目_Android_Android Listview_Android Arrayadapter - Fatal编程技术网

Android 如何从自定义Listview中删除项目

Android 如何从自定义Listview中删除项目,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,在我的列表视图中选择复选框时,我想从列表视图中删除项目。我的自定义适配器如下所示: public class listadapter extends ArrayAdapter<list> { private int resource; private LayoutInflater inflater; private Context context; // private final boolean[] mCheckedState; private final ArrayList&l

在我的
列表视图
中选择复选框时,我想从
列表视图
中删除项目。我的自定义
适配器
如下所示:

public class listadapter extends ArrayAdapter<list> {

private int resource;
private LayoutInflater inflater;
private Context context;
// private final boolean[] mCheckedState;
private final ArrayList<list> list;
private final Activity mcontext;
boolean checkAll_flag = false;
boolean checkItem_flag = false;

public listadapter(Activity context, ArrayList<list> list) {
    super(context, R.layout.listdata, list);
    this.mcontext = context;
    this.list = list;
}

static class ViewHolder {
    protected TextView text1;
    protected TextView text2;
    protected CheckBox checkbox;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    if (convertView == null) {
        LayoutInflater inflator = mcontext.getLayoutInflater();
        convertView = inflator.inflate(R.layout.listdata, null);
        viewHolder = new ViewHolder();
        viewHolder.text1 = (TextView) convertView
                .findViewById(R.id.textViewLat);
        viewHolder.text2 = (TextView) convertView
                .findViewById(R.id.textViewLng);
        viewHolder.checkbox = (CheckBox) convertView
                .findViewById(R.id.checkBoxList);

        viewHolder.checkbox
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                                               boolean isChecked) {
                int getPosition = (Integer) buttonView.getTag(); 
           // Here we get the position that we have set for the checkbox using setTag.

                list.get(getPosition).setSelected(

                buttonView.isChecked()); 
           // Set the value of checkbox to maintain its state.
          }
     });
     convertView.setTag(viewHolder);
     convertView.setTag(R.id.textViewLat, viewHolder.text1);
     convertView.setTag(R.id.textViewLng, viewHolder.text2);
     convertView.setTag(R.id.checkBoxList, viewHolder.checkbox);

    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.checkbox.setTag(position); // This line is important.

    viewHolder.text1.setText(list.get(position).getLat());
    viewHolder.text2.setText(list.get(position).getLng());
    viewHolder.checkbox.setChecked(list.get(position).isSelected());

    return convertView;
}
公共类listadapter扩展了ArrayAdapter{
私有int资源;
私人充气机;
私人语境;
//私有最终布尔值[]mCheckedState;
私人最终阵列列表;
私人最终活动mcontext;
布尔checkAll_标志=false;
布尔checkItem_标志=false;
公共listadapter(活动上下文、ArrayList列表){
super(context,R.layout.listdata,list);
this.mcontext=上下文;
this.list=列表;
}
静态类视窗夹{
受保护的文本视图text1;
受保护的文本视图文本2;
受保护复选框;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder ViewHolder=null;
if(convertView==null){
LayoutFlater充气器=mcontext.getLayoutFlater();
convertView=充气机充气(R.layout.listdata,null);
viewHolder=新的viewHolder();
viewHolder.text1=(TextView)convertView
.findViewById(R.id.textViewLat);
viewHolder.text2=(TextView)convertView
.findViewById(R.id.textViewLng);
viewHolder.checkbox=(复选框)convertView
.findViewById(R.id.复选框列表);
viewHolder.checkbox
.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
int getPosition=(整数)buttonView.getTag();
//在这里,我们使用setTag获得为复选框设置的位置。
list.get(getPosition).setSelected(
buttonView.isChecked());
//设置复选框的值以保持其状态。
}
});
convertView.setTag(viewHolder);
setTag(R.id.textViewLat,viewHolder.text1);
setTag(R.id.textViewLng,viewHolder.text2);
setTag(R.id.checkBoxList,viewHolder.checkbox);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.checkbox.setTag(位置);//这一行很重要。
viewHolder.text1.setText(list.get(position.getLat());
viewHolder.text2.setText(list.get(position.getLng());
viewHolder.checkbox.setChecked(list.get(position.isSelected());
返回视图;
}
}


请指导我在选中
复选框时删除
列表视图
中的项目需要做哪些更改,欢迎使用Stackoverflow。在这里提问时,,您需要描述您为解决问题所付出的努力。从
列表中删除该项,然后在java活动中执行此操作
notifydatasetchanged
@Egor我见过其他关于堆栈溢出的类似帖子,但它删除了第一项,然后给出了一个边界例外的数组,为什么不添加代码您已经习惯于问题描述而没有发布ArrayIndexOutOfBoundsException的堆栈跟踪?如果(this.list.size()!=0){CheckBox chk=(CheckBox)convertView.findViewById(R.id.checkBoxList);如果(chk!=null){chk.setId(position);chk.setOnClickListener(new AdapterView.OnClickListener()){@Override public void onClick(View v){int id=v.getId();list.remove(id);notifyDataSetChanged();}}}}}