我创建了一个listview,它从alertDialog editText获取输入并填充它。一切都运行正常但是在从行中删除项目并再次添加内容后,它还会添加以前删除的项目,这也不是一件好事。我知道我的问题的清晰画面,但很难知道该怎么做。
这是我在listView中添加列表的代码:
添加项目
{ items[items.length - 1] = value;
List<String> newList = new LinkedList<String>(Arrays.asList(items));
//Log.e("STRIING", newArray.toString());
adapter = new MyListAdapter(RecyclerActivity.this, newList);
mListView.setAdapter(adapter);
String[] temp = new String[items.length + 1];
for (int i = 0; i < items.length; i++)
temp[i] = items[i];
items = temp;
alertDialog.dismiss();
adapter.notifyDataSetChanged();
input.getText().clear();
}
在这里,我必须通知已删除项目的更改,以获得所需的结果,但我不知道如何。
以下是我从列表视图中删除项目的地方:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> adapterView, View view, int i, long l) {
final String pos = mListView.getItemAtPosition(i).toString();
Log.e("POS", pos);
deleteDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
adapter.remove(pos);
adapter.notifyDataSetChanged();
}
});
deleteDialog.show();
}
});
以下是绑定数据的MyAdapter类:
public class MyListAdapter extends ArrayAdapter<String>{
private final Context context;
private final List<String> values;
class ViewHolder {
public TextView text;
}
public MyListAdapter(Context context, List<String> newList) {
super(context, R.layout.row_item, newList);
this.context = context;
this.values = newList;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rowView = inflater.inflate(R.layout.row_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.tvItem);
textView.setText(values.get(position));
return rowView;
}
}
我的适配器是全局变量
我已尝试使用此功能,以便通过以下链接查看问题是否得到修复:
Deleting the items for the listview
代码现在看起来像这样。 :
newList.remove(pos);
adapter.notifyDataSetChanged();
newList只不过是 List&lt;&gt; String类型
请帮助我,因为我只浪费了很长时间。提前谢谢。
EDITS
我已经尝试在我的适配器类中添加它,但这给了我相同的结果:
public void removeItem(String position) {
values.remove(position);
notifyDataSetChanged();
}
像这样调用此方法
adapter.removeItem(pos);
但结果相同
解决
我通过在Global中定义单个ArrayList并使用它来解决了这个问题。让我的工作变得轻松
在我的添加部分中,我已将其更改为
{
newArrayList.add(value);
adapter = new MyListAdapter(RecyclerActivity.this, newList);
mListView.setAdapter(adapter);
String[] temp = new String[items.length + 1];
for (int i = 0; i < items.length; i++)
temp[i] = items[i];
items = temp;
alertDialog.dismiss();
adapter.notifyDataSetChanged();
input.getText().clear();
}
只需创建单个变量,因为数组可以顺利运行。