【问题标题】:Custom toolbar navigation via menuitems to other activities通过菜单项自定义工具栏导航到其他活动
【发布时间】:2016-12-20 21:48:20
【问题描述】:

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

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

我创建了一个类,我们称之为“设置”,它是从 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);
}

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

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

您需要我的案件的其他信息吗?

【问题讨论】:

  • typeof(UserSettingsActivity) 是什么意思,刚开始活动?
  • 是的,当我开始活动时,视图正在发生变化,我的列表视图正在从我的 UserSettingsActivity 中填充。我编辑了我的初始帖子。
  • 抱歉迟到了,好的,最后一个问题是您需要将设置 xml 作为一项活动,还是我可以向您解释 Google 推荐的用于抽屉项目的片段?

标签: c# android xamarin navigation toolbar


【解决方案1】:

如果我正确理解您的问题,您的操作栏上有一个菜单列表,并且您希望选择要导航到不同页面的项目。然后您需要在每个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);
    }
}

【讨论】:

  • 谢谢。我也想过碎片,但还没有触及它。我会看看。同时我已经找到了一个解决方案:将工具栏添加到每个活动并使用 homebackbutton。这就是你一开始写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多