在完成另一个活动后刷新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();方法,但都不起作用。也许我不应该使用它们,我不知道…我将感谢任何建议!:)

在完成另一个活动后刷新MainActivity的列表视图

对于一个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()或添加新行)