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

时间:2014-08-14 10:48:48

标签: c# android listview xamarin baseadapter

在关闭其他活动后刷新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();方法,但没有一个工作。也许我没有使用它们,因为我不应该知道......我会很感激任何想法! :)

3 个答案:

答案 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()或添加你的新行)