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