通过菜单项自定义工具栏导航到其他活动

Custom toolbar navigation via menuitems to other activities

我刚刚开始使用 Xamarin 为 android 平台编写第一个应用程序。 从自定义工具栏开始,我最终对菜单项的导航目的一无所知。

当我的应用程序启动时,自定义工具栏与我的自定义菜单项一起显示。到目前为止,一切都很好。当我点击一个菜单项时,内容需要切换到另一个视图。

我创建了一个 class,我们称它为 "Settings",它被 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);
}

单击菜单项时,正在加载值,但没有工具栏。我没有可点击的 "back-button".

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

您需要我的案例的更多信息吗?

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

或者另一种解决此问题的常用方法是,您可以在 MainActivity 中使用 FragmentFrameLayout 并在此 Fragment/ 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);
}

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

public class Edit_Fragment : Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        return inflater.Inflate(Resource.Layout.edit, container, false);
    }
}