从Fragment调用New Intent(Activity)保留左侧导航

时间:2014-05-15 06:31:44

标签: android

从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); }
            }
        }
}

片段A OnOptionsItemSelected。

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

片段B OnOptionsItemSelected。

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项时,它应该显示一个新的活动屏幕,卸载片段,并且还应该能够保留左侧导航栏。有可能吗?

0 个答案:

没有答案