Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在片段关闭/停用/处置时调用事件_C#_Android_Android Studio_Xamarin - Fatal编程技术网

C# 如何在片段关闭/停用/处置时调用事件

C# 如何在片段关闭/停用/处置时调用事件,c#,android,android-studio,xamarin,C#,Android,Android Studio,Xamarin,我给用户一个确认对话框vie DialogFragment,用户有一个(OK按钮) 如果用户按下OK按钮i,它将进入第二个活动并执行一些操作,但如果用户在片段外部单击,片段将隐藏并保持在同一活动屏幕中, 当DialogFragment停用或隐藏时,是否仍要调用事件 我使用这段代码来显示FragmentDialog类 private void user_Registered() { FragmentTransaction transaction =

我给用户一个确认对话框vie DialogFragment,用户有一个(OK按钮) 如果用户按下OK按钮i,它将进入第二个活动并执行一些操作,但如果用户在片段外部单击,片段将隐藏并保持在同一活动屏幕中, 当DialogFragment停用或隐藏时,是否仍要调用事件

我使用这段代码来显示FragmentDialog类

       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");