Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 单击ArrayAdapter内的图像以删除listview中的项_Android_Arraylist_Fragment_Adapter - Fatal编程技术网

Android 单击ArrayAdapter内的图像以删除listview中的项

Android 单击ArrayAdapter内的图像以删除listview中的项,android,arraylist,fragment,adapter,Android,Arraylist,Fragment,Adapter,我有碎片 public class MyFragment extends Fragment {... 它调用适配器 MyArrayAdapter adapter = new MyArrayAdapter... my.setAdapter(adapter); 适配器具有用于删除项的映像。我可以侦听图像单击,但无法从片段中的listview中删除项目 public class MyArrayAdapter extends ArrayAdapter<String>

我有碎片

    public class MyFragment extends Fragment {...
它调用适配器

    MyArrayAdapter adapter = new MyArrayAdapter...
    my.setAdapter(adapter);
适配器具有用于删除项的映像。我可以侦听图像单击,但无法从片段中的listview中删除项目

public class MyArrayAdapter extends ArrayAdapter<String> {...

public View getView(final int position, View convertView, ViewGroup parent) {...

    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // ???????????
        ...}
公共类MyArrayAdapter扩展了ArrayAdapter{。。。
公共视图getView(最终整数位置,视图转换视图,视图组父级){。。。
ImageView ImageView=(ImageView)rowView.findViewById(R.id.icon);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
// ???????????
...}

自从我使用Java以来,已经有很长一段时间了,但据我记忆所及,您可以使用:

this.remove(position);
this.notifyDataSetChanged();

只需调用
convertView.setVisibility(View.GONE)因为你的点击在一个
OnClickListener
内部类中,你必须指定
MyArrayAdapter。这个
可以从点击监听器内部访问适配器的功能。如果你只使用
this
,你将引用
OnClickListener
,并且只能访问该类中的方法屁股

像这样:

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

    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            MyArrayAdapter.this.remove(getItem(position));
            MyArrayAdapter.this.notifyDataSetChanged();
        }
}

您可以在适配器内编写一个方法:

private boolean removeItemByPosition(int position){
    try{
        items.remove(position);
        this.notifyDataSetChanged();
        return true;
    } catch (Exception e){
        e.printStackTrace();
        return false;
    }   
}

在某些情况下,如果
notifyDataSetChanged()
方法不起作用,请尝试重新设置
ListView适配器
,您应该能够在
片段

中执行此操作,只需从适配器的数据中删除对象,并在
ImageView的onClick()中调用适配器的
notifyDataSetChanged()
如何访问适配器?您在adapter类中,只需使用
调用即可。单击imageView上的this
即可使用“this”…我不太理解。抱歉。@Arnes您的类
扩展了ArrayAdapter
。您可以使用
MyArrayAdapter。this.notifyDataSetchManaged()
这一个会使应用程序崩溃,并且:(02-27 21:25:31.781:E/AndroidRuntime)(11332):致命异常:main 02-27 21:25:31.781:E/AndroidRuntime(11332):java.lang.UnsupportedOperationException 02-27 21:25:31.781:E/AndroidRuntime(11332):at java.util.AbstractList.remove(AbstractList.java:638)02-27 21:25:31.781:E/AndroidRuntime(11332):at java.util.AbstractList$SimpleListator.remove(AbstractList.java:75)02-27 21:25:31.781:E/AndroidRuntime(11332):在java.util.AbstractCollection.remove(AbstractCollection.java:229)02-27 21:25:31.781:E/AndroidRuntime(11332):在android.widget.ArrayAdapter.remove(ArrayAdapter.java:244)可能是因为您使用数组ie:String[]初始化适配器而不是列表ie:ArrayList。如果看不到整个MyArrayAdapter构造函数,很难判断。这是当前对象,您正在调用一个静态对象,该静态对象可能尚未初始化,也可能尚未初始化。