在关闭其他活动后刷新listview适配器时遇到了麻烦。我正在制作送货单的程序,我的主屏幕是一个带有备注的列表。我的问题是,当我添加一个新笔记(我在另一个活动中创建)时,新笔记会出现在列表中。它只在屏幕旋转或刷新整个程序后出现。这是我的MainActivity代码:
protected override void OnCreate (Bundle SavedInstanceState)
{
base.OnCreate (SavedInstanceState);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
// Get our UI controls from the loaded layout
Button addButton = FindViewById<Button>(Resource.Id.AddButton);
// Loading the already saved notes from external file
objectToSerialize = new ObjectToSerialize();
serializer = new Serializer ();
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
if (System.IO.File.Exists (path + "outputFile.txt")) {
deserialize ();
}
//Displaying the Notes in a custom made ListView
objListItem = FindViewById<ListView> (Resource.Id.listView1);
objListItem.Adapter = new MonoBaseAdapter2 (this, _lstNoteInfo);
objListItem.FastScrollEnabled = true;
objListItem.ItemClick += delegate(object sender, AdapterView.ItemClickEventArgs e) {
var itemClicked = new Intent(this,typeof(InfoActivity));
itemClicked.PutExtra("File name",_lstNoteInfo[e.Position].ImageID);
itemClicked.PutExtra("Date",_lstNoteInfo[e.Position].Date);
itemClicked.PutExtra("Type",_lstNoteInfo[e.Position].Type);
itemClicked.PutExtra("Supplier",_lstNoteInfo[e.Position].Supplier);
itemClicked.PutExtra("Amount",_lstNoteInfo[e.Position].Amount);
itemClicked.PutExtra("Info",_lstNoteInfo[e.Position].AddInfo);
StartActivity (itemClicked);
};
addButton.Click += delegate {
StartActivity (typeof(AddActivity));
};
}
我试过覆盖onResume()并使用invalidate(),notifyDataSetChanged(),refreshDrawableState();方法,但没有一个工作。也许我没有使用它们,因为我不应该知道......我会很感激任何想法! :)
答案 0 :(得分:1)
对于ArrayAdapter,只有在适配器上使用add(),insert(),remove()和clear()时,notifyDataSetChanged才有效。
构造ArrayAdapter时,它保存传入的List的引用。如果要传入属于Activity成员的List,并稍后更改该Activity成员,则ArrayAdapter仍然保持引用原始列表。适配器不知道您更改了活动中的列表。
您的选择是:
使用ArrayAdapter的功能修改基础List(add(),insert(),remove(),clear()等) 使用新的List数据重新创建ArrayAdapter。 (使用大量资源和垃圾收集。) 创建自己的派生自BaseAdapter和ListAdapter的类,允许更改基础List数据结构。 每次更新列表时使用notifyDataSetChanged()。要在UI-Thread上调用它,请使用Activity的runOnUiThread()。然后,notifyDataSetChanged()将起作用。
答案 1 :(得分:0)
@Override
protected void onResume() {
super.onResume();
posts.clear();
posts.addAll(tempPosts);
postsAdapter.notifyDataSetChanged();
}
我在我的项目中使用它,就像一个魅力。
发布是我的列表,tempPost是我保存已编辑发布列表的列表。
答案 2 :(得分:0)
尝试使用StartActivityForResult,然后你可以@Override onActivityResult方法并在那里做一些事情(比如notifyDataSetChanged()或添加你的新行)