如何删除listview中的项目?

时间:2018-01-09 19:04:02

标签: java android listview adapter android-arrayadapter

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

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

如果知道其确切位置,如何删除项目?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

然后,当你想删除给定它的位置的项目时,请执行以下操作:

adp.remove(getItem(position));

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