从Fragment保留左侧导航
调用新意图(Actvity)我在我的android应用程序中使用了navDrawer作为LeftMenu,它在正确的内容上呈现了fragemnts。我已经提到了这个链接 (https://github.com/jamesmontemagno/Xam.NavDrawer/blob/master/Sample/NavDrawer/Activities/HomeActivity.cs)用于navDrawer。
当应用程序启动导航栏时,scneario会在正确的内容中显示2个fragemtns。每个片段都与菜单选项相关联,菜单选项显示在顶部的右上角。
item.xml
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/RiskProfile"
android:title="@string/RiskProfile"
/>
<item
android:id="@+id/PlaceOrder"
android:title="@string/PlaceOrder"
/>
<item
android:id="@+id/FixAppointment"
android:title="@string/FixAppointment"/>
<item
android:id="@+id/AddOpportunity"
android:title="@string/AddOpportunity"
/>
</menu>
itemone.xml
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/Computer"
android:title="@string/Computer"
/>
<item
android:id="@+id/Phone"
android:title="@string/Phone"
/>
<item
android:id="@+id/PlaceOrder"
android:title="@string/PlaceOrder"
/>
</menu>
片段A使用item.xml。
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater menuInflater)
{
menuInflater.Inflate(Resource.Menu.items, menu);
base.OnCreateOptionsMenu(menu, menuInflater);
}
片段B使用itemone.Xml。
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater menuInflater)
{
menuInflater.Inflate(Resource.Menu.itemone, menu);
base.OnCreateOptionsMenu(menu, menuInflater);
}
片段A使用item.xml。片段B使用itemone.Xml。 这两个片段都有重复的菜单项(PlaceOrder),因此当这些片段都加载到导航抽屉的正确内容中时,正确的内容会在右上方显示单个选项菜单,以便显示重复项目一次。
下面是每个片段的代码,显示右上角的单个菜单选项。
public override void OnPrepareOptionsMenu(IMenu menu)
{
for (int i = 0; i < menu.Size(); i++)
{
for (int j = i + 1; j < menu.Size(); j++)
{
if (menu.GetItem(i).ItemId == menu.GetItem(j).ItemId)
{ menu.GetItem(i).SetVisible(false); }
}
}
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
base.OnOptionsItemSelected(item);
switch (item.ItemId)
{
case Resource.Id.AddOpportunity:
// Toast .MakeText(this.View, "You selected Phone" , ToastLength.Short).Show();
break;
case Resource.Id.FixAppointment:
// Toast.MakeText(BaseContext, "You selected Computer", ToastLength.Short).Show ();
break;
case Resource.Id.PlaceOrder:
activity = new Activity();
try
{
var intent = new Intent(activity, typeof(PlaceOrderView));
activity.StartActivity(intent);
}
catch(Exception e)
{
throw new Exception();
}
//StartActivity(typeof(PlaceOrderView));
// AndroidAppApplication.Instance.Initialize(ActivityView.PlaceOrderView, null);
//var view = LayoutInflater.Inflate(Resource.Layout.LoginView, null, false);
//this.Initialize(view, AndroidAppApplication.Instance.LoginViewModel);
// Toast.MakeText(BaseContext, "You selected Gamepad", ToastLength.Short).Show();
break;
case Resource.Id.RiskProfile:
// Toast.MakeText(BaseContext, "You selected Camera", ToastLength.Short).Show();
break;
}
return base.OnOptionsItemSelected(item);
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
base.OnOptionsItemSelected(item);
switch (item.ItemId)
{
case Resource.Id.Computer :
// Toast .MakeText(this.View, "You selected Phone" , ToastLength.Short).Show();
break;
case Resource.Id.Phone:
// Toast.MakeText(BaseContext, "You selected Computer", ToastLength.Short).Show();
break;
case Resource.Id.PlaceOrder:
activity = new Activity();
var intent = new Intent(activity, typeof(PlaceOrderView));
activity.StartActivity(intent);
// Toast.MakeText(BaseContext, "You selected Gamepad", ToastLength.Short).Show();
break;
}
return base.OnOptionsItemSelected(item);
}
所以问题是:
1)当我选择Option Menu项时,应用程序生命周期会调用片段OnOptionsItemSelected事件。这是android Application的正确行为吗?
2)当我选择Place Order项时,它应该显示一个新的活动屏幕,卸载片段,并且还应该能够保留左侧导航栏。有可能吗?