在活动之间共享数据(字符串),保存并将其添加到ListView C#Xamarin
首先,我必须提到,我是Android应用程序开发的新手。我正在使用Xamarin(C#)开发应用程序。问题出在这里。我想编写一个简单的ToDoList应用程序来学习如何在活动之间存储/共享数据 “添加”按钮位于主布局中。当用户单击它时,会显示另一个屏幕,用户可以在其中命名(EditText)任务并添加其说明(EditText)。当用户点击屏幕上的“完成”按钮时,应用程序会将用户重定向到主屏幕,并将用户的任务添加到列表视图中 我做了一些研究,发现我可以通过SharedReference、将数据保存到设备上的文件或sql来实现这一点 我决定选择共享参考资料。问题是,我找到的关于SharedPreferences的所有东西(相信我,我搜索了很多)都是用Java编写的,这并不是什么大问题,但从来没有人提到过使用共享首选项在不同活动之间共享数据。我的代码如下,我真的挣扎了一天,所以请帮助我 我的主要活动(其中按钮“添加”为):在活动之间共享数据(字符串),保存并将其添加到ListView C#Xamarin,c#,android,listview,xamarin,sharedpreferences,C#,Android,Listview,Xamarin,Sharedpreferences,首先,我必须提到,我是Android应用程序开发的新手。我正在使用Xamarin(C#)开发应用程序。问题出在这里。我想编写一个简单的ToDoList应用程序来学习如何在活动之间存储/共享数据 “添加”按钮位于主布局中。当用户单击它时,会显示另一个屏幕,用户可以在其中命名(EditText)任务并添加其说明(EditText)。当用户点击屏幕上的“完成”按钮时,应用程序会将用户重定向到主屏幕,并将用户的任务添加到列表视图中 我做了一些研究,发现我可以通过SharedReference、将数据保存
公共类main活动:活动
{
按钮添加;
列表视图列表;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
///集合布局
SetContentView(Resource.Layout.Main);
///定义变量、按钮、列表
add=findviewbyd(Resource.Id.add);
list=findviewbyd(Resource.Id.list);
///从secondActivity获取字符串
var prefs=Application.Context.getSharedReferences(“todolist”,FileCreationMode.Private);
var preference=prefs.GetString(“任务”,null);
///将字符串(首选项)添加到列表
List lista=新列表();
添加(首选项);
///“转换”列表到列表视图
ArrayAdapter=新的ArrayAdapter(这个,Resource.Layout.Main,lista);
list.Adapter=适配器;
添加。单击+=委派
{
StartActivity(新意图(此,类型(添加活动));
};
}
}
我的第二个屏幕(第二个活动):
公共类addActivity:Activity
{
///定义变量并创建列表
按钮完整;
编辑文本名称、描述;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.add);
///变数
complete=findviewbyd(Resource.Id.complete);
name=findviewbyd(Resource.Id.name);
description=findviewbyd(Resource.Id.description);
///转换为字符串
字符串title=name.Text.ToString();
字符串内容=description.Text.ToString();
///将字符串传递给MainActivity
完成。单击+=委派
{
if(String.IsNullOrEmpty(title))
{
Toast.MakeText(这是“请输入任务名称”,ToastLength.Short).Show();
}
其他的
{
var prefs=Application.Context.getSharedReferences(“todolist”,FileCreationMode.Private);
var prefEditor=prefs.Edit();
PutString(“任务”,标题);
提交();
Toast.MakeText(此“任务已添加”,ToastLength.Short).Show();
StartActivity(新意图(本,类型(主要活动));
}
};
}
}
您可以通过意图将字符串传递到下一个活动
您不应该在开始活动的参数中定义该意图,而应该在此之前定义它,然后使用putExtra
方法添加字符串
示例:您可以在此处使用SQLite数据库。如果您想建立待办事项列表,我建议您这样做。这也会让你更容易
Xamarin提供了大量关于如何在此处设置的文档:
他们还提供了一个示例应用程序,可以实现您在这里想要做的事情:
问题是我想保存数据(任务/字符串)。我在某个地方读到,Intent只发送字符串,它不会为用户下次打开应用程序存储字符串。如果我错了,请纠正我。有很多方法可以保存这样的数据。android网站在这里概述了一些:如果提供的信息回答了您的问题,请将我的答案标记为正确。我已经反复阅读了好几遍,但我找不到在C#中实现共享首选项/内部存储/外部存储的示例。所以,如果您知道如何使用C#中的共享首选项来完成我的要求,我会将您的答案标记为正确。我知道你想说什么,但我不知道如何在C#中使用它。提前谢谢。
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)));
}
};
}
}