通过menuitems自定义工具栏导航到其他活动

时间:2016-12-20 21:48:21

标签: c# android xamarin navigation toolbar

我刚开始使用Xamarin编写Android平台的第一个应用程序。 从自定义工具栏开始,我最终没有在菜单项上进行导航的线索。

当我的应用程序启动时,自定义工具栏正在显示我的自定义菜单项。到现在为止还挺好。当我点击menuitem时,内容需要切换到另一个视图。

我创建了一个类,让我们称之为“设置”,这是从ListActivity中删除的。

public class UserSettingsActivity : ListActivity
{
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                ListViewSetup();
            }

            private void ListViewSetup()
            {
                string[] actions = new string[] { "Add", "Modify", "Delete" };
                IListAdapter adapter = new ChangeSettingsAdapter(this, actions);
            }
}

据我所知,使用ListActivity我不需要创建单独的布局。我的适配器完成剩下的工作以显示正确的值。

现在对于我不知道的部分。

public override bool OnOptionsItemSelected(IMenuItem item)
{
            Intent intent = new Intent(this, typeof(UserSettingsActivity));
            StartActivity(intent);

            return base.OnOptionsItemSelected(item);
}

单击menuitem时,正在加载值,但没有工具栏。我没有可点击的“后退按钮”。

我有哪些选择来实现这些功能?

您是否需要我的案例的其他信息?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您在操作栏上有一个菜单列表,并且您想要选择要导航到不同页面的项目。然后,您需要在每个Toolbar中设置Activity,以便在每项活动中应用Toolbar

另一种解决此问题的常见方法是,您可以在Fragment中使用FrameLayoutMainActivity,并在此Fragment / {{1 }}。例如:

主要布局:

FrameLayout

代码背后:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />
  <FrameLayout
    android:id="@+id/myframe"
    android:layout_height="match_parent"
    android:layout_width="match_parent" />
</LinearLayout>

通过这样做,您需要将休息活动修改为片段,例如:

public override bool OnOptionsItemSelected(IMenuItem item)
{
    Toast.MakeText(this, "Action selected: " + item.TitleFormatted,
        ToastLength.Short).Show();

    //if (item.TitleFormatted.ToString() == "Edit")
    //    StartActivity(typeof(Edit_Activity));
    //else if (item.TitleFormatted.ToString() == "Save")
    //    StartActivity(typeof(Save_Activity));
    if (item.TitleFormatted.ToString() == "Edit")
    {
        var newFragment = new Edit_Fragment();
        var ft = FragmentManager.BeginTransaction();
        ft.Replace(Resource.Id.myframe, newFragment);
        ft.Commit();
    }
    else if (item.TitleFormatted.ToString() == "Save")
    {
        var newFragment = new Save_Fragment();
        var ft = FragmentManager.BeginTransaction();
        ft.Replace(Resource.Id.myframe, newFragment);
        ft.Commit();
    }

    return base.OnOptionsItemSelected(item);
}