C# 如何在片段关闭/停用/处置时调用事件
我给用户一个确认对话框vie DialogFragment,用户有一个(OK按钮) 如果用户按下OK按钮i,它将进入第二个活动并执行一些操作,但如果用户在片段外部单击,片段将隐藏并保持在同一活动屏幕中, 当DialogFragment停用或隐藏时,是否仍要调用事件 我使用这段代码来显示FragmentDialog类C# 如何在片段关闭/停用/处置时调用事件,c#,android,android-studio,xamarin,C#,Android,Android Studio,Xamarin,我给用户一个确认对话框vie DialogFragment,用户有一个(OK按钮) 如果用户按下OK按钮i,它将进入第二个活动并执行一些操作,但如果用户在片段外部单击,片段将隐藏并保持在同一活动屏幕中, 当DialogFragment停用或隐藏时,是否仍要调用事件 我使用这段代码来显示FragmentDialog类 private void user_Registered() { FragmentTransaction transaction =
private void user_Registered()
{
FragmentTransaction transaction =
FragmentManager.BeginTransaction();
UserRegistered obj = new UserRegistered();
obj.Show(transaction,"sss");
}
这是FrameDialogCustomizedClassCode:
public class UserRegistered : DialogFragment,IOnClickListener
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.User_Registered, container,false);
Button btnOK = view.FindViewById<Button>(Resource.Id.btnOkay);
btnOK.SetOnClickListener(this);
return view;
}
public void OnClick(View v)
{
if (v.Id== Resource.Id.btnOkay)
{
var intent = new Intent(Activity, typeof(MainActivity));
StartActivity(intent);
}
}
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
}
public类UserRegistered:DialogFragment,IOnClickListener
{
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图=充气机。充气(Resource.Layout.User\u已注册,容器,false);
按钮btnOK=view.findviewbyd(Resource.Id.btnOkay);
btnOK.SetOnClickListener(这个);
返回视图;
}
公共void OnClick(视图v)
{
if(v.Id==Resource.Id.btnOkay)
{
var intent=新意图(活动,类型(主要活动));
星触觉(意向);
}
}
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
}
}
例如:
此片段具有执行某些操作的Ok按钮,但当用户单击片段外部时,此片段自动隐藏,需要执行的代码保留
我想要什么:
我想阻止DialogFragment被取消,
或者我想调用事件,然后对话框片段被取消
您必须在对话框生成器中设置
dialog.setcanceledontouchout(false)
和builder.setCancelable(false)
您可以使用以下代码(但在Kotlin中):
是的,您可以覆盖类
DialogFragment
的方法OnCreateDialog
,并在其中创建一个AlertDialog
如果您想创建自己的自定义对话框,只需将布局膨胀到AlertDialog中即可。并调用方法alert.SetView(yourview)代码>
例如,您可以定义一个对话框片段
类,如下所示:
public class DialogFragment2: DialogFragment
{
Context context;
public DialogFragment2(Context context)
{
this.context = context;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
var view = inflater.Inflate(Resource.Layout.user_registered, null, false);
Button btnOK = view.FindViewById<Button>(Resource.Id.btnOkay);
btnOK.Click += BtnOK_Click;
AlertDialog.Builder alert = new AlertDialog.Builder(Activity);
alert.SetTitle("Custom Dialog");
alert.SetView(view);
alert.SetCancelable(false);
//alert.SetPositiveButton("OK", (senderAlert, args) => {
// Toast.MakeText(Activity, "Go!", ToastLength.Short).Show();
//});
//alert.SetNegativeButton("Cancel", (senderAlert, args) => {
// Toast.MakeText(Activity, "Cancelled!", ToastLength.Short).Show();
//});
AlertDialog alertDialog = alert.Create();
alertDialog.SetCanceledOnTouchOutside(false);
return alertDialog;
}
private void BtnOK_Click(object sender, EventArgs e)
{
var intent = new Intent(Activity, typeof(MainActivity));
StartActivity(intent);
}
}
结果是:
您正在使用内置的警报对话框,而我正在尝试创建自己的自定义对话框,如图所示。就像你在使用set(cancelable as False)一样,DialogFragment中有他们的任何内容吗?这对我来说很有效,我已经开始了,但仍然需要更好的答案。你能发布更多关于你的问题的详细信息吗?我没有使用AlertDialog.Builder(),你能再次看到我的代码吗?
public class DialogFragment2: DialogFragment
{
Context context;
public DialogFragment2(Context context)
{
this.context = context;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
var view = inflater.Inflate(Resource.Layout.user_registered, null, false);
Button btnOK = view.FindViewById<Button>(Resource.Id.btnOkay);
btnOK.Click += BtnOK_Click;
AlertDialog.Builder alert = new AlertDialog.Builder(Activity);
alert.SetTitle("Custom Dialog");
alert.SetView(view);
alert.SetCancelable(false);
//alert.SetPositiveButton("OK", (senderAlert, args) => {
// Toast.MakeText(Activity, "Go!", ToastLength.Short).Show();
//});
//alert.SetNegativeButton("Cancel", (senderAlert, args) => {
// Toast.MakeText(Activity, "Cancelled!", ToastLength.Short).Show();
//});
AlertDialog alertDialog = alert.Create();
alertDialog.SetCanceledOnTouchOutside(false);
return alertDialog;
}
private void BtnOK_Click(object sender, EventArgs e)
{
var intent = new Intent(Activity, typeof(MainActivity));
StartActivity(intent);
}
}
FragmentTransaction transcation = FragmentManager.BeginTransaction();
DialogFragment2 alertdFragment = new DialogFragment2(this);
// Show Alert DialogFragment
alertdFragment.Show(transcation, "Alert Dialog Fragment");