我正在创建一个包含两行名称和流派的播放列表,如何删除它。
这是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;
}
}
如果知道其确切位置,如何删除项目?
谢谢!
答案 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的类型。