如何删除列表视图中的项目?

How to remove a item in listview?

我正在创建一个包含 2 行名称和流派的播放列表,如何删除它。

这是 MainActivity :

String[] gene, sl;
...
adp = new Adapter(MainActivity.this, gene, sl);       
     lv.setAdapter(adp);   

这是适配器

public class Adapter extends ArrayAdapter<String> {

   private final Activity context;
   private final String[] gene;
   private final String[] sl;

   SharedPreferences preferences;
   public Adapter(Activity context, String[] gene ,String[] sl) {     
   super(context, R.layout.activity_m , gene);

       this.context = context;
       this.gene = gene;
       this.sl = sl;
       }

private class ViewHolder{
  TextView txtgene, txtsl;
}
       @Override 
     public View getView(final int position, View view, ViewGroup parent) {       
       ViewHolder holder;       
       if (view == null) {       
        LayoutInflater inflater = context.getLayoutInflater();
        view = inflater.inflate(R.layout.activity_m, null, true);
     holder = new ViewHolder();        
     holder.txtgene = (TextView) view.findViewById(R.id.txtgene); 
     holder.txtsl = (TextView) view.findViewById(R.id.txtsl);

    view.setTag(holder);
      }else{
      holder = (ViewHolder) view.getTag();
      }
      if (gene[position] != null) {
    holder.txtgene.setText(gene[position]); 
    }
      holder.txtsl.setText(sl[position]);
       return view;
        }
    }

如何在知道项目的确切位置后将其移除?

谢谢!

您正在使用接受数组的 ArrayAdapter 构造函数。这反过来将在 ArrayAdapter 内部创建一个不可变列表。因此,您将无法通过这条路线修改您的适配器。

相反,从您的数组创建一个新的 ArrayList 并调用采用 List 的 ArrayAdapter 构造函数。

因此,将 Adapter 构造函数中的超级调用更改为:

super(context, R.layout.activity_m, new ArrayList<>(Arrays.asList(gene)));

然后,当您想要删除某个项目的位置时,请执行以下操作:

adp.remove(getItem(position));

PS:你应该考虑将你的基因和sl数组重构为一个class,然后将它用作你的List的类型。