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构造函数,很难判断。这是当前对象,您正在调用一个静态对象,该静态对象可能尚未初始化,也可能尚未初始化。