我正在其中創建一個動態對話框,xamarin.android
并且我希望該對話框接收一個功能,該功能將在單擊操作按鈕時執行。
這是我的代碼:
public static void ShowDialogBox(Context context, Function dynamicFunction)
{
Dialog popupDialog = new Dialog(context);
popupDialog.SetContentView(Resource.Layout.dialog_dynamic);
popupDialog.Window.SetSoftInputMode(SoftInput.AdjustResize);
popupDialog.Window.SetBackgroundDrawableResource(Android.Resource.Color.Transparent);
popupDialog.Show();
TextView title = popupDialog.FindViewById<TextView>(Resource.Id.dialog_title);
TextView content = popupDialog.FindViewById<TextView>(Resource.Id.dialog_content);
ImageView icon = popupDialog.FindViewById<ImageView>(Resource.Id.dialog_icon);
Button actionButton = popupDialog.FindViewById<Button>(Resource.Id.dialog_action_button);
popupDialog.FindViewById<ImageButton>(Resource.Id.dialog_close).Click = delegate { popupDialog.Dismiss(); };
popupDialog.FindViewById<Button>(Resource.Id.dialog_cancel_button).Click = delegate { popupDialog.Dismiss(); };
actionButton.Click = dynamicFunction;
}
*請注意,Function 引數只是一個示例。另外,我會將這個對話框中的文本和內容作為引數。
示例場景:
- 如果我將 GetCurrentDate 函式發送到此對話框,當單擊操作按鈕時,它將獲取當前日期。
- 如果我將 OpenBluetooth 功能發送到此對話框,當單擊操作按鈕時,它將打開藍牙
是否可以向該函式發送另一個函式ShowDialogBox
并在單擊操作按鈕時運行它?我在這里的目的是使我的代碼干凈且易于使用。
uj5u.com熱心網友回復:
正如@Nico 已經評論的那樣,您可以使用Func
或委托作為引數。我建議你Action
改用。
onClicked
事件Xamarin.Forms.Button
使用帶有簽名的事件處理程式void OnClicked(object? sender, EventArgs e)
。因此,您的簽名將使用Action<object?, EventArgs>
引數。
有幾點需要注意:
- 如果您在專案中不使用可為空的參考型別,請省略問號
null
在將引數分配給Clicked
事件之前,您需要檢查引數- 呼叫 an
Action
不會回傳任何內容。如果您想“獲取當前日期”,您的操作必須在欄位或控制元件中寫入當前日期 - 如果您的函式需要其他引數,則需要傳遞一個委托(或將您的函式呼叫包裝在一個帶有
sender
ande
引數的函式中:ShowDialogBox(context, (sender, e) => MyFunction("other data"))
uj5u.com熱心網友回復:
面向物件可以幫助您:您可以將您的函式抽象為一個類,然后派生任何特定的函式類來實作您的特定操作。類似于以下內容:
abstract class ActionClassBase
{
public abstract void Action();
private string data = "";
public string Data { get { return data; } set { data = value; } }
}
class GetCurrentDateAction : ActionClassBase
{
public override void Action()
{
Data = DateTime.Now.ToString();
}
}
class OpenBlueToothAction : ActionClassBase
{
public override void Action()
{
Data = "BlueTooth opened";
}
}
public static void ShowDialogBox(Context context, ActionClassBase action)
{
Dialog popupDialog = new Dialog(context);
popupDialog.SetContentView(Resource.Layout.dialog_dynamic);
popupDialog.Window.SetSoftInputMode(SoftInput.AdjustResize);
popupDialog.Window.SetBackgroundDrawableResource(Android.Resource.Color.Transparent);
popupDialog.Show();
TextView title = popupDialog.FindViewById<TextView>(Resource.Id.dialog_title);
TextView content = popupDialog.FindViewById<TextView>(Resource.Id.dialog_content);
ImageView icon = popupDialog.FindViewById<ImageView>(Resource.Id.dialog_icon);
Button actionButton = popupDialog.FindViewById<Button>(Resource.Id.dialog_action_button);
popupDialog.FindViewById<ImageButton>(Resource.Id.dialog_close).Click = delegate { popupDialog.Dismiss(); };
popupDialog.FindViewById<Button>(Resource.Id.dialog_cancel_button).Click = delegate { popupDialog.Dismiss(); };
actionButton.Click = (sender, ev) => action.Action();
}
進一步使用這種方法,添加新功能非常容易:只需派生一個新類并覆寫該Action()
方法
uj5u.com熱心網友回復:
您可以在 ActionClassBase 中創建一個 Dialog 并Dismiss()
呼叫Action()
. 如
abstract class ActionClassBase
{
public Dialog popupDialog;
public abstract void Action();
private string data = "";
public string Data { get { return data; } set { data = value; } }
}
class GetCurrentDateAction : ActionClassBase
{
public override void Action()
{
Data = DateTime.Now.ToString();
base.popupDialog.Dismiss();
}
}
class OpenBlueToothAction : ActionClassBase
{
public override void Action()
{
Data = "BlueTooth opened";
base.popupDialog.Dismiss();
}
}
然后,將對話框傳遞給ShowDialogBox(Context context, Function dynamicFunction)
. 如:
Dialog popupDialog = new Dialog(context);
popupDialog.SetContentView(Resource.Layout.dialog_dynamic);
popupDialog.Window.SetSoftInputMode(SoftInput.AdjustResize);
popupDialog.Window.SetBackgroundDrawableResource(Android.Resource.Color.Transparent);
dynamicFunction.popupDialog = popupDialog;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470399.html
標籤:C# 仿制药 xamarin.android 动态规划
上一篇:通用特征系結的終身問題
下一篇:基于函式引數值的窄物件鍵