在完成另一个活动后刷新MainActivity的列表视图
本文关键字:MainActivity 列表 视图 刷新 另一个 活动 | 更新日期: 2023-09-27 18:17:54
在我关闭另一个活动后,我有刷新我的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();方法,但都不起作用。也许我不应该使用它们,我不知道…我将感谢任何建议!:)
对于一个ArrayAdapter, notifyDataSetChanged只有在你使用add(), insert(), remove()和clear()时才有效
构造ArrayAdapter时,它保存传入的List的引用。如果你传入一个List,这个List是Activity的成员,然后改变这个Activity的成员,ArrayAdapter仍然持有一个对原始List的引用。适配器不知道您更改了活动中的列表。
你的选择是:
使用ArrayAdapter的函数来修改底层List (add(), insert(), remove(), clear()等)用新的List数据重新创建ArrayAdapter。(使用大量资源和垃圾收集。)创建从BaseAdapter和ListAdapter派生的类,允许更改底层List数据结构。每次列表更新时使用notifyDataSetChanged()。要在ui线程上调用它,请使用Activity的runonuthread()。然后,notifyDataSetChanged()将工作
@Override
protected void onResume() {
super.onResume();
posts.clear();
posts.addAll(tempPosts);
postsAdapter.notifyDataSetChanged();
}
我在我的项目中使用了这个,效果很好。
Post是我的列表,tempPost是我保存编辑后的列表的列表。
尝试StartActivityForResult,然后您可以@Override onActivityResult方法并在那里做一些事情(如notifyDataSetChanged()或添加新行)