单击 ArrayAdapter 中的图像以删除列表视图中的项目

Click on image inside ArrayAdapter to remove item in listview

我有碎片...

    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) {
        // ???????????
        ...}

我已经很久没做了 Java,但据我所知,你可以使用这个:

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

直接调用convertView.setVisibility(View.GONE);

因为您的点击是在 OnClickListener 内部 class 内,您必须指定 MyArrayAdapter.this 才能从点击侦听器内部访问适配器的功能。如果你只使用 this 你将引用 OnClickListener 并且只能访问 class.

上的方法

像这样:

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;
    }   
}

在某些情况下,id notifyDataSetChanged() 方法不起作用,请尝试重新设置 ListView Adapter,您应该可以在 Fragment 中执行此操作。