この同じ問題に関して、すでに多くの質問があることは承知しています。
私のは少し奇妙に見えます!モデルの ArrayList を渡す ListView 用のカスタム アダプターがあります。このリストにコンテキスト メニューを設定しました。[削除] をクリックすると、ListView から行を削除する必要があります (その場で更新します)。
を呼び出しxxxxx.remove(info.position)
てlistadapter.notifyDataSetChanged()
いますが、ListView に存在していた最後の行が複製されます。
コードは次のとおりです。
ListView のアダプター:
クラス MyAdapter は ArrayAdapter を拡張します {
private final Context context;
private final ArrayList<ListModel> itemsArrayList;
public MyAdapter(Context context, ArrayList<ListModel> itemsArrayList) {
super(context, R.layout.viewlistitems, itemsArrayList);
this.context = context;
this.itemsArrayList = itemsArrayList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Get rowView from inflater
rowView = inflater.inflate(R.layout.viewlistitems, parent, false);
}
else
rowView = convertView;
// 3. Get the two text view from the rowView
TextView listNameView = (TextView) rowView.findViewById(R.id.listName);
listNameView.setTypeface(ViewListActivity.segoe);
listDateView.setTypeface(ViewListActivity.openSansLightIt);
String listName1 = itemsArrayList.get(position).getListName();
String listName2 = listName1.substring(0,1).toUpperCase() + listName1.substring(1);
listNameView.setText(listName2);
return rowView;
}
}
コンテキストメニュー:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
if (v.getId()==R.id.ListView01) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
menu.setHeaderTitle(todoItems.get(info.position).getListName());
String[] menuItems = {"Delete"};
for (int i = 0; i<menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
}
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
if(item.getTitle().equals("Delete")) {
Toast.makeText(this,
todoItems.get(info.position).getListName() + " deleted!",
Toast.LENGTH_SHORT).show();
todoItems.remove(info.position);
//newList.invalidateViews();
adapter.notifyDataSetChanged();
}
return true;
}
1 日以来、このバグを修正できません! なぜこれが起こっているのか、何が原因なのか、何か考えはありますか?
どうもありがとう!