我試圖在 Xamarin 的片段中實作類似于 OnBackPressed() 的東西,但到目前為止我發現的唯一解決方案是 Java。
這是Java中的一個示例,可以滿足我的要求:
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
Toast.makeText(mContext, "back pressed", Toast.LENGTH_SHORT).show();
// And when you want to go back based on your condition
if (yourCondition) {
this.setEnabled(false);
requireActivity().onBackPressed();
}
}
};
我怎么能把那段代碼轉換成 C#?
uj5u.com熱心網友回復:
更新
創建一個介面來處理你的事件:
public interface IOnBackPressedHandler
{
bool OnBackPressed();
}
在你的活動中(下面只是一個例子)設定你的界面回呼如下
public class FragActivity : AppCompatActivity
{
public override void OnBackPressed()
{
Fragment fragment = SupportFragmentManager.FindFragmentById(Resource.Id.yourFragmentId);
if (!(fragment is IOnBackPressedHandler) || !((IOnBackPressedHandler)fragment).OnBackPressed()) {
base.OnBackPressed();
}
}
}
最后,您的片段看起來像這樣:
public class SomeFragment : Fragment, IOnBackPressedHandler
{
public bool OnBackPressed()
{
//Callbacks will be received here.
return true;
}
}
希望這能讓你更容易理解。您還可以將此方法作為基本 Fragment 的一部分將其標記為虛擬,然后讓所有類繼承它以繼續覆寫它...
OG 回答:
那么你不能在 C# 中有匿名類,所以只需創建一個繼承這個抽象類的類,你就很好了:
public class HandleOnBackPressedCallback : OnBackPressedCallback
{
public HandleOnBackPressedCallback(bool enabled) : base(enabled)
{
}
public override void HandleOnBackPressed()
{
Toast.MakeText(context, "back pressed", ToastLength.Long).Show();
// And when you want to go back based on your condition
if (yourCondition)
{
this.setEnabled(false);
requireActivity().onBackPressed();
}
}
}
祝你好運!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/504936.html
下一篇:在自定義控制元件中系結資料
