在移动到xamarin.android中的主应用程序之前显示登录页面

在移动到xamarin.android中的主应用程序之前显示登录页面,xamarin.android,navigation-drawer,android-dialogfragment,Xamarin.android,Navigation Drawer,Android Dialogfragment,因此,我正在尝试制作一个android应用程序,它以一个登录页面(我认为可能是一个对话框片段)开始,如果用户的凭据正确,那么他将被引导到主应用程序,该应用程序应该是一个导航抽屉应用程序。我试图使用对话框片段,但我不知道如何将其设置为在开始时显示。我该怎么办?您应该创建一个活动作为mainloancher,活动您可以使用空白的Layout.xml,如下面的代码,然后弹出一个对话框片段,如下面的代码。注意:您应该在活动属性中添加MainLauncher=true,NoHistory=trueNoHi

因此,我正在尝试制作一个android应用程序,它以一个登录页面(我认为可能是一个对话框片段)开始,如果用户的凭据正确,那么他将被引导到主应用程序,该应用程序应该是一个导航抽屉应用程序。我试图使用对话框片段,但我不知道如何将其设置为在开始时显示。我该怎么办?

您应该创建一个活动作为
mainloancher
,活动您可以使用空白的
Layout.xml,如下面的代码,然后弹出一个对话框片段,如下面的代码。注意:您应该在
活动
属性中添加
MainLauncher=true,NoHistory=true
NoHistory=true
将使后退按钮导航到桌面

namespace App2
{
    [Activity(Label = "LoginActivity", Theme = "@style/AppTheme.NoActionBar",MainLauncher = true,NoHistory =true)]
    public class LoginActivity : AppCompatActivity, OnLoginInforCompleted
    {
        public void inputLoginInforCompleted(string userName, string passWord)
        {
            //You can get the username and password here
            StartActivity(new Intent(this,typeof(MainActivity)));
        }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.LoginLayout);
           
            MyDialogFragment dialogFragment = new MyDialogFragment();
            dialogFragment.setOnLoginInforCompleted(this);
            dialogFragment.Cancelable = false;
            var SupportFragmentManager = this.FragmentManager;
            dialogFragment.Show(SupportFragmentManager, "dialog");
            
        }
    }
}
我实现了一个回调界面
OnLoginInforCompleted
,如果用户点击登录按钮,将导航到导航抽屉页面

 public interface OnLoginInforCompleted
    {
        void inputLoginInforCompleted(String userName, String passWord);
    }
下面是关于
MyDialogFragment
的代码

    public class MyDialogFragment : DialogFragment
    {
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            View view = inflater.Inflate(Resource.Layout.layout3, container, false);
            Button button = view.FindViewById<Button>(Resource.Id.button1);
            EditText MyeditText1 = view.FindViewById<EditText>(Resource.Id.editText1);
            EditText MyeditText2 = view.FindViewById<EditText>(Resource.Id.editText2);
            button.Click += delegate {
                //set the data to the loginpage
                mOnLoginInforCompleted.inputLoginInforCompleted(MyeditText1.Text.ToString(), MyeditText2.Text.ToString());
              
                Dismiss();
            };
            return view;
            
        }

        //set for Callback
        private OnLoginInforCompleted mOnLoginInforCompleted;
        public void setOnLoginInforCompleted(OnLoginInforCompleted onLoginInforCompleted)
        {
            mOnLoginInforCompleted = onLoginInforCompleted;
        }

        public override Dialog OnCreateDialog(Bundle savedInstanceState)
        {
            return base.OnCreateDialog(savedInstanceState);
        }
    }

公共类MyDialogFragment:DialogFragment { 创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态) { 视图=充气机。充气(Resource.Layout.layout3,container,false); Button Button=view.findviewbyd(Resource.Id.button1); EditText MyeditText1=view.FindViewById(Resource.Id.editText1); EditText MyeditText2=view.FindViewById(Resource.Id.editText2); 按钮。单击+=委派{ //将数据设置为登录页面 MonLoginForCompleted.InputLoginForCompleted(MyeditText1.Text.ToString(),MyeditText2.Text.ToString()); 解雇(); }; 返回视图; } //设置为回调 仅限私人登录完成MonLoginin for Completed; 公共void设置OnLoginInforCompleted(OnLoginInforCompleted)OnLoginInforCompleted { mOnLoginInforCompleted=仅LogininForCompleted; } 创建对话框上的公共覆盖对话框(Bundle savedInstanceState) { 返回base.OnCreateDialog(savedInstanceState); } }
这里是运行GIF

这是我的演示,你可以参考一下


非常感谢先生的回答,这非常有帮助。如果我想在通过Web服务登录之前检查凭据,我应该在按钮单击事件中执行此操作,对吗?我是否应该替换“MonLoginForCompleted.InputLoginForCompleted”。我一直在试着这么做,但对我来说不起作用。再次非常感谢