在活动之间共享数据(字符串),保存并将其添加到ListView C#Xamarin中

本文关键字:添加 C#Xamarin ListView 保存 共享 之间 活动 数据 字符串 | 更新日期: 2023-09-27 18:26:04

首先我必须提到我是Android应用程序开发的新手。我正在使用Xamarin(C#)开发应用程序。问题来了。我想编写一个简单的ToDoList应用程序来学习如何在活动之间存储/共享数据。

"添加"按钮位于主布局中。当用户单击它时,会显示另一个屏幕,用户可以在其中命名(EditText)任务并添加其描述(EditText(编辑文本))。当用户点击屏幕中的"完成"按钮时,应用程序会将用户重定向到主屏幕,并将用户的任务添加到列表视图中。

我做了一些研究,发现我可以通过SharedPreferences来做到这一点,将数据保存到设备上的文件或sql中。

我决定使用SharedPreferences。问题是,我发现的关于SharedPreferences的所有内容(相信我,我搜索了很多)都是用Java编写的,这不会是一个大问题,但从来没有人提到过使用共享偏好在不同的活动之间共享数据。我的代码在下面,我真的为此挣扎了一天多,所以请帮帮我。

我的主要活动(其中按钮"添加"):

    public class MainActivity : Activity
{
    Button add;
    ListView list;
    protected override void OnCreate(Bundle bundle)
    {

        base.OnCreate(bundle); 
        ///set layout
        SetContentView(Resource.Layout.Main);
        ///define variables, buttons, lists
        add = FindViewById<Button>(Resource.Id.add);
        list = FindViewById<ListView>(Resource.Id.list);
        ///get string from secondActivity
        var prefs = Application.Context.GetSharedPreferences("todolist", FileCreationMode.Private);
        var preference = prefs.GetString("task", null);
        ///add string (preference) to list
        List<string> lista = new List<string>();
        lista.Add(preference);
        ///"convert" list to listview
        ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Resource.Layout.Main, lista);
        list.Adapter = adapter;
        add.Click += delegate
        {
            StartActivity(new Intent(this, typeof(addActivity)));
        };     

    }       
}

我的第二个屏幕(第二个活动):

    public class addActivity : Activity
{
    /// define variables and create list
    Button complete;
    EditText name, description;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.add);
        ///variables
        complete = FindViewById<Button>(Resource.Id.complete);
        name = FindViewById<EditText>(Resource.Id.name);
        description = FindViewById<EditText>(Resource.Id.description);
        ///converting to string
        string title = name.Text.ToString();
        string content = description.Text.ToString();
        ///pass string to MainActivity
        complete.Click += delegate
        {
            if (String.IsNullOrEmpty(title))
            {
                Toast.MakeText(this, "Please enter task name", ToastLength.Short).Show();
            }
            else
            {
                var prefs = Application.Context.GetSharedPreferences("todolist", FileCreationMode.Private);
                var prefEditor = prefs.Edit();
                prefEditor.PutString("task", title);
                prefEditor.Commit();
                Toast.MakeText(this, "Task added", ToastLength.Short).Show();
                StartActivity(new Intent(this, typeof(MainActivity)));
            }
        };

    }
}

在活动之间共享数据(字符串),保存并将其添加到ListView C#Xamarin中

您可以在这里使用SQLite数据库。如果你想建立一个待办事项列表,我建议你这样做。这也会让你更容易。

Xamarin有很多关于如何在这里设置的文档:

https://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/

他们还有一个示例应用程序,可以在这里做你想做的事情:

https://github.com/xamarin/mobile-samples/tree/master/Tasky

您可以通过Intent 将字符串传递给下一个活动

与其在Start activity的arg中定义意图,不如在此之前定义它,然后使用putExtra方法添加字符串

示例:如何对字符串数据使用putExtra()和getExtra(