![](/img/trans.png)
[英]How to let user interact with the object when edit button is pressed in unity c#?
[英]How to let user edit their input in Xamarin C#
我正在制作一個提醒應用程序,我希望用戶能夠編輯他們的提醒。
目前,當用戶編輯提醒時,它會編輯提醒列表中的所有提醒,如下所示:
這是我的代碼的一些部分:
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);
}
}
}
我的數據庫助手刪除更新和添加提醒:
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;
}
}
}
如何更改我的代碼以便我只編輯用戶想要編輯的提醒?
任何幫助表示贊賞!
編輯!!
感謝@jai 的幫助!
但是現在當我選擇編輯提醒時,我有另一個問題,一開始所有字段都是空白的。 像這樣:
當我像這樣放置_dateDisplay = (EditText)"reminder.Date"
:
我收到錯誤“對象引用未設置為對象的瞬間”
如果您需要,這是我的完整應用程序: https : //github.com/CrazyDanyal1414/ReminderApp
再次感謝任何幫助!
您必須將所選對象的 ID 從列表活動傳遞到要更新的編輯活動。
ListReminder.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();
}
編輯提醒.cs
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)));
};
}
ReminderHelper.cs
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.