单击 ArrayAdapter 中的图像以删除列表视图中的项目
Posted
技术标签:
【中文标题】单击 ArrayAdapter 中的图像以删除列表视图中的项目【英文标题】:Click on image inside ArrayAdapter to remove item in listview 【发布时间】:2015-04-30 15:38:34 【问题描述】:我有片段...
public class MyFragment extends Fragment ...
调用适配器...
MyArrayAdapter adapter = new MyArrayAdapter...
my.setAdapter(adapter);
适配器有删除项目的图像。我可以收听图像点击,但无法从片段中的列表视图中删除项目。
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)
// ???????????
...
【问题讨论】:
简单地从适配器的数据中删除对象并在ImageView's onClick()
中调用适配器的notifyDatasetChnaged()
如何访问适配器?
你在适配器类,只需使用.this
调用
在 imageView onClick 上使用“this”...我不太明白。对不起。
@Arnes 你的班级extends ArrayAdapter<String>
。你可以使用MyArrayAdapter.this.notifyDatasetChnaged()
【参考方案1】:
因为您的点击位于OnClickListener
内部类中,您必须指定MyArrayAdapter.this
才能从点击侦听器内部访问适配器的功能。如果您只使用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();
【讨论】:
这个应用程序也崩溃了:( 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): 在 java.util.AbstractList.remove(AbstractList.java:638) 02-27 21:25:31.781: E/AndroidRuntime(11332): 在 java.util .AbstractList$SimpleListIterator.remove(AbstractList.java:75) 02-27 21:25:31.781: E/AndroidRuntime(11332): at java.util.AbstractCollection.remove(AbstractCollection.java:229) 02-27 21:25 :31.781: E/AndroidRuntime(11332): 在 android.widget.ArrayAdapter.remove(ArrayAdapter.java:244) 这可能是因为您使用数组初始化适配器,即:String[] 而不是列表,即:ArrayList我已经很久没有做Java了,但我记得你可以用这个:
this.remove(position);
this.notifyDataSetChanged();
【讨论】:
这是当前对象,您正在调用一个可能尚未初始化也可能尚未初始化的静态对象,可能还没有。【参考方案3】:您可以在适配器中编写一个方法:
private boolean removeItemByPosition(int position)
try
items.remove(position);
this.notifyDataSetChanged();
return true;
catch (Exception e)
e.printStackTrace();
return false;
在某些情况下,notifyDataSetChanged()
方法不起作用,请尝试重新设置ListView Adapter
,您应该可以在Fragment
中执行此操作。
【讨论】:
【参考方案4】:只需拨打convertView.setVisibility(View.GONE);
【讨论】:
以上是关于单击 ArrayAdapter 中的图像以删除列表视图中的项目的主要内容,如果未能解决你的问题,请参考以下文章
如何实现 Asynctask 在 ArrayAdapter 中加载图像
如何使用 ArrayAdapter 在 ArrayList 中的 ListView 中显示项目(图像的路径)?
连续按钮的自定义arrayadapter和onclicklistener
在android中使用arrayadapter类自定义listview