C# 如何让用户在Xamarin C中编辑他们的输入#

C# 如何让用户在Xamarin C中编辑他们的输入#,c#,xamarin.android,C#,Xamarin.android,我正在制作一个提醒应用程序,我希望用户能够编辑他们的提醒 此时,当用户编辑提醒时,它会编辑提醒列表中的所有提醒,如下所示: 以下是我的代码的一些部分: namespace ReminderApp.Models { public class Reminder { public int Id { get; set; } public string Date { get; set; } public string Time { get;

我正在制作一个提醒应用程序,我希望用户能够编辑他们的提醒

此时,当用户编辑提醒时,它会编辑提醒列表中的所有提醒,如下所示:

以下是我的代码的一些部分:

namespace ReminderApp.Models
{
    public class Reminder
    {
        public int Id { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
        public string Note { get; set; }
        public Reminder()
        {
        }
    }
}
我的数据库:

using Android.Content;
using Android.Database.Sqlite;

namespace ReminderApp.HelperRepository
{
    public class DataStore : SQLiteOpenHelper
    {
        private static string _DatabaseName = "reminderDB.db";
        public DataStore(Context context) : base(context, _DatabaseName, null, 1)
        {

        }

        public override void OnCreate(SQLiteDatabase db)
        {
            db.ExecSQL(ReminderHelper.CreateQuery);
        }

        public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            db.ExecSQL(ReminderHelper.DeleteQuery);
            OnCreate(db);
        }
    }
}
用于删除更新和添加提醒的My database helper:

using System;
using System.Collections.Generic;
using Android.Content;
using Android.Database.Sqlite;
using ReminderApp.Models;
using Android.Database;
namespace ReminderApp.HelperRepository
{
    public class ReminderHelper
    {
        private const string TableName = "reminderTable";
        private const string ColumnID = "Id";
        private const string ColumnDate = "Date";
        private const string ColumnTime = "Time";
        private const string ColumnNote = "Note";
        public const string CreateQuery = "CREATE TABLE " + TableName + " ( "
            + ColumnID + " INTEGER PRIMARY KEY,"
               + ColumnDate + " TEXT,"
               + ColumnTime + " TEXT,"
               + ColumnNote + " TEXT)";


        public const string DeleteQuery = "DROP TABLE IF EXISTS " + TableName;

        public ReminderHelper()
        {
        }

        public static void InsertReminderData(Context context, Reminder reminder)
        {
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            ContentValues contentValues = new ContentValues();
            contentValues.Put(ColumnDate, reminder.Date);
            contentValues.Put(ColumnTime, reminder.Time);
            contentValues.Put(ColumnNote, reminder.Note);

            db.Insert(TableName, null, contentValues);
            db.Close();
        }

        public static void EditReminderData(Context context, Reminder reminder)
        {
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            ContentValues contentValues = new ContentValues();
            contentValues.Put(ColumnDate, reminder.Date);
            contentValues.Put(ColumnTime, reminder.Time);
            contentValues.Put(ColumnNote, reminder.Note);

            db.Update(TableName, contentValues, null, null);
            db.Close();
        }

        public static List<Reminder> GetReminderList(Context context)
        {
            List<Reminder> reminder = new List<Reminder>();
            SQLiteDatabase db = new DataStore(context).ReadableDatabase;
            string[] columns = new string[] { ColumnID, ColumnDate, ColumnTime, ColumnNote };

            using (ICursor cursor = db.Query(TableName, columns, null, null, null, null, null))
            {
                while (cursor.MoveToNext())
                {
                    reminder.Add(new Reminder
                    {
                        Id = cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
                        Date = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
                        Time = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
                        Note = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
                    });
                }
            }
            db.Close();
            return reminder;
        }

        public static void DeleteReminder(Context context, Reminder reminder)
        {
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            db.Delete(TableName, ColumnDate + "=? AND " + ColumnTime + "=? OR " + ColumnID + "=" + reminder.Id, new string[] { reminder.Date, reminder.Time });
            db.Close();
        }

        public static Reminder SelectReminder(Context context)
        {
            Reminder reminder;
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            string[] columns = new string[] { ColumnID, ColumnDate, ColumnTime, ColumnNote };
            string datetime = DateTime.Now.ToString();
            string[] dt = datetime.Split(' ');
            var date = dt[0];
            var tt = dt[1].Split(':');
            var time = tt[0] + ":" + tt[1] + " " + dt[2];


            using (ICursor cursor = db.Query(TableName, columns, ColumnDate + "=? AND " + ColumnTime + "=?", new string[] { date, time }, null, null, null))
            {
                if (cursor.MoveToNext())
                {
                    reminder = new Reminder
                    {
                        Id = cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
                        Date = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
                        Time = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
                        Note = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
                    };
                }
                else
                {
                    reminder = null;
                }
            }
            return reminder;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用Android.Content;
使用Android.Database.Sqlite;
使用ReminderApp.Models;
使用Android.Database;
命名空间提醒App.HelperRepository
{
公共类提醒帮助器
{
private const string TableName=“提醒表”;
private const string ColumnID=“Id”;
private const string ColumnDate=“日期”;
private const string ColumnTime=“Time”;
private const string ColumnNote=“Note”;
public const string CreateQuery=“创建表”+表名+”(“
+ColumnID+“整数主键,”
+ColumnDate+“文本,”
+ColumnTime+“文本,”
+栏注+“正文”;
public const string DeleteQuery=“如果存在,则删除表”+表名;
公共提醒帮助者()
{
}
公共静态void insertrementerdata(上下文上下文,提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
ContentValues ContentValues=新ContentValues();
contentValues.Put(ColumnDate、remention.Date);
contentValues.Put(ColumnTime、remention.Time);
contentValues.Put(ColumnNote、rementer.Note);
插入(TableName,null,contentValues);
db.Close();
}
公共静态void editMemberData(上下文上下文、提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
ContentValues ContentValues=新ContentValues();
contentValues.Put(ColumnDate、remention.Date);
contentValues.Put(ColumnTime、remention.Time);
contentValues.Put(ColumnNote、rementer.Note);
Update(TableName,contentValues,null,null);
db.Close();
}
公共静态列表GetMemberList(上下文)
{
列表提醒=新建列表();
SQLiteDatabase db=新数据存储(上下文).ReadableDatabase;
字符串[]列=新字符串[]{ColumnID、ColumnDate、ColumnTime、ColumnNote};
使用(ICursor cursor=db.Query(TableName,columns,null,null,null,null))
{
while(cursor.MoveToNext())
{
提醒。添加(新提醒)
{
Id=cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
日期=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
时间=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
注意=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
});
}
}
db.Close();
退货提醒;
}
公共静态无效删除提醒(上下文上下文,提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
db.Delete(TableName,ColumnDate+“=”和“+ColumnTime+”=”或“+ColumnID+“=”+rements.Id,新字符串[]{rements.Date,rements.Time});
db.Close();
}
公共静态提醒选择提醒(上下文)
{
提醒;
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
字符串[]列=新字符串[]{ColumnID、ColumnDate、ColumnTime、ColumnNote};
字符串datetime=datetime.Now.ToString();
字符串[]dt=datetime.Split(“”);
var日期=dt[0];
var tt=dt[1]。拆分(“:”);
var time=tt[0]+”:“+tt[1]+”“+dt[2];
使用(ICursor cursor=db.Query(TableName,columns,ColumnDate+“=”和“+ColumnTime+”=?”,新字符串[]{date,time},null,null,null))
{
if(cursor.MoveToNext())
{
提醒=新提醒
{
Id=cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
日期=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
时间=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
注意=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
};
}
其他的
{
提醒=null;
}
}
退货提醒;
}
}
}

如何更改代码,以便只编辑用户要编辑的提醒

感谢您的帮助


编辑

谢谢@jai的帮助

但现在我有另一个问题,当我选择编辑提醒时,所有字段在开始时都是空白的。像这样:

但是,我希望在按“编辑”时更像这样:

当我把
\u dateDisplay=(EditText)“remention.Date”
放在如下位置时:

我收到一个错误“对象引用未设置为对象上的瞬间”

如果您需要,这是我的完整申请表:


再次感谢您的帮助

您必须将列表活动中选定对象的Id传递给要更新的编辑活动

列表提醒.cs

private void List_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            AlertDialog alert = dialog.Create();
            alert.SetTitle("Edit or Delete?");
            alert.SetMessage("Would you like to edit your reminder or delete it?");
            alert.SetIcon(Resource.Drawable.image_2020_09_29T09_45_02_165Z);
            alert.SetButton("Delete", (c, ev) =>
            {
                AlertDialog.Builder dialog2 = new AlertDialog.Builder(this);
                AlertDialog alert2 = dialog2.Create();
                alert2.SetTitle("Delete Reminder");
                alert2.SetMessage("Are you sure!");
                alert2.SetIcon(Resource.Drawable.Screenshot_2020_11_11_at_4_57_02_PM);
                alert2.SetButton("yes", (c, ev) =>  
                {
                    TextView _txtLabel;
                    reminder = listitem[e.Position];  
                    ReminderHelper.DeleteReminder(this,reminder);
                    _txtLabel = FindViewById<TextView>(Resource.Id.txt_label);
                    StartActivity(new Intent(this, typeof(ListReminder)));
                    Toast.MakeText(this, "Deleted Sucessfully!", ToastLength.Short).Show();
                    GC.Collect();  
                });
                alert2.SetButton2("no", (c, ev) => { });
                alert2.Show();
            });
            alert.SetButton2("Edit", (c, ev) =>
            {
                var intent = new Intent(this, typeof(EditActivity));
                intent.PutExtra("Id", listitem[e.Position].Id);
                StartActivity(intent);
            });
            alert.SetButton3("Cancel", (c, ev) => { });

            alert.Show();
        }
protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            reminder = new Reminder();
            var id = Intent.GetIntExtra("Id", 0);
            if (id != 0)
                reminder.Id = id;
            _dateDisplay = FindViewById<EditText>(Resource.Id.date_display);
            _timeDisplay = FindViewById<EditText>(Resource.Id.time_display);
            _txtNote = FindViewById<EditText>(Resource.Id.txtNote);

            _saveButton = FindViewById<Button>(Resource.Id.save);
            _btnList = FindViewById<Button>(Resource.Id.btnList);

            _dateDisplay.Click += DateSelect_OnClick;
            _timeDisplay.Click += TimeSelectOnClick;
            _saveButton.Click += SaveRecords;
            _btnList.Click += (sender, e) => {
                StartActivity(new Intent(this, typeof(ListReminder)));
            };
        }
public static void EditReminderData(Context context, Reminder reminder)
        {
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            ContentValues contentValues = new ContentValues();
            contentValues.Put(ColumnDate, reminder.Date);
            contentValues.Put(ColumnTime, reminder.Time);
            contentValues.Put(ColumnNote, reminder.Note);

            db.Update(TableName, contentValues, ColumnID + "=" + reminder.Id, null);
            db.Close();
        }

您必须将列表活动中选定对象的Id传递给要更新的编辑活动

列表提醒.cs

private void List_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            AlertDialog alert = dialog.Create();
            alert.SetTitle("Edit or Delete?");
            alert.SetMessage("Would you like to edit your reminder or delete it?");
            alert.SetIcon(Resource.Drawable.image_2020_09_29T09_45_02_165Z);
            alert.SetButton("Delete", (c, ev) =>
            {
                AlertDialog.Builder dialog2 = new AlertDialog.Builder(this);
                AlertDialog alert2 = dialog2.Create();
                alert2.SetTitle("Delete Reminder");
                alert2.SetMessage("Are you sure!");
                alert2.SetIcon(Resource.Drawable.Screenshot_2020_11_11_at_4_57_02_PM);
                alert2.SetButton("yes", (c, ev) =>  
                {
                    TextView _txtLabel;
                    reminder = listitem[e.Position];  
                    ReminderHelper.DeleteReminder(this,reminder);
                    _txtLabel = FindViewById<TextView>(Resource.Id.txt_label);
                    StartActivity(new Intent(this, typeof(ListReminder)));
                    Toast.MakeText(this, "Deleted Sucessfully!", ToastLength.Short).Show();
                    GC.Collect();  
                });
                alert2.SetButton2("no", (c, ev) => { });
                alert2.Show();
            });
            alert.SetButton2("Edit", (c, ev) =>
            {
                var intent = new Intent(this, typeof(EditActivity));
                intent.PutExtra("Id", listitem[e.Position].Id);
                StartActivity(intent);
            });
            alert.SetButton3("Cancel", (c, ev) => { });

            alert.Show();
        }
protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            reminder = new Reminder();
            var id = Intent.GetIntExtra("Id", 0);
            if (id != 0)
                reminder.Id = id;
            _dateDisplay = FindViewById<EditText>(Resource.Id.date_display);
            _timeDisplay = FindViewById<EditText>(Resource.Id.time_display);
            _txtNote = FindViewById<EditText>(Resource.Id.txtNote);

            _saveButton = FindViewById<Button>(Resource.Id.save);
            _btnList = FindViewById<Button>(Resource.Id.btnList);

            _dateDisplay.Click += DateSelect_OnClick;
            _timeDisplay.Click += TimeSelectOnClick;
            _saveButton.Click += SaveRecords;
            _btnList.Click += (sender, e) => {
                StartActivity(new Intent(this, typeof(ListReminder)));
            };
        }
public static void EditReminderData(Context context, Reminder reminder)
        {
            SQLiteDatabase db = new DataStore(context).WritableDatabase;
            ContentValues contentValues = new ContentValues();
            contentValues.Put(ColumnDate, reminder.Date);
            contentValues.Put(ColumnTime, reminder.Time);
            contentValues.Put(ColumnNote, reminder.Note);

            db.Update(TableName, contentValues, ColumnID + "=" + reminder.Id, null);
            db.Close();
        }

谢谢@jai现在工作!但是你知道我怎样才能在用户编辑之前得到提醒的“日期”、“时间”和“备注”吗