在导航抽屉菜单上添加页面并导航到菜单上的相应页面单击Xamarin Android

时间:2017-07-11 09:46:41

标签: xamarin xamarin.android visual-studio-2017

我使用左侧侧的导航抽屉菜单制作了一个示例。我已修复4个菜单项(主页,关于我们,查询,联系我们)。

现在我需要在我的布局中添加页面,默认情况下,它应该显示带有相应内容的主页。然后,当我点击关于我们菜单项时,应该显示关于我们页面以及相应的内容......对于其他菜单链接也是如此。

我不知道如何添加页面,我应该如何使菜单可点击并跟踪应该单击哪个菜单项以及应该打开哪个页面以及如何打开。

我在谷歌,YouTube和几个教程上搜索过很多内容,但没有找到任何正确的指导。因此,请帮助我....

下面是MainActivity.cs的代码

 using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Support.V7.App;
using Android.Support.V4.Widget;
using V7Toolbar = Android.Support.V7.Widget.Toolbar;
using Android.Support.Design.Widget;

namespace NavigationDrawerLayout
{
    [Activity(Label = "J&K Tour and Travel", Theme = "@style/Theme.DesignDemo", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : AppCompatActivity
    {

        DrawerLayout drawerLayout;
        NavigationView navigationView;


        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);


            // Create ActionBarDrawerToggle button and add it to the toolbar
            var toolbar = FindViewById<V7Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);


            var drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.drawer_open, Resource.String.drawer_close);
            drawerLayout.SetDrawerListener(drawerToggle);
            drawerToggle.SyncState();

            navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
            setupDrawerContent(navigationView);
        }
        void setupDrawerContent(NavigationView navigationView)
        {
            navigationView.NavigationItemSelected += (sender, e) => {
                //e.MenuItem.SetChecked(true);
                drawerLayout.CloseDrawers();
            };
        }

        public override bool OnCreateOptionsMenu(IMenu menu)
        {

            navigationView.InflateMenu(Resource.Menu.nav_menu);
            return true;

        }



    }
}

此外,我正在分享以下整个示例项目的.rar文件的链接。我使用c#:

使用VS 2017 Community Edition制作了这个项目

https://drive.google.com/open?id=0B584mT-OF6vJZzdFem4tMG9jV1U

1 个答案:

答案 0 :(得分:0)

建议[System.Management.Automation.AliasInfo].DisplayProperty一起使用,以显示不同的网页。

在您的布局中,您可以为片段容器放置NavigationDrawer,例如:

Fragment

然后在FrameLayout方法中首先提交您的主页:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

  <FrameLayout android:id="@+id/framelayout"
    android:layout_height="match_parent"
    android:layout_width="match_parent" />

  <android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    android:layout_height="match_parent"
    android:id="@+id/nav_view"
    app:menu="@menu/nav_menu"
    app:headerLayout="@layout/drawer_header" />
</android.support.v4.widget.DrawerLayout>

然后在OnCreate事件中:

FragmentTransaction transaction = this.FragmentManager.BeginTransaction();
HomeFragment home = new HomeFragment();
transaction.Add(Resource.Id.framelayout, home).Commit();

因为它是NavigationItemSelected,所以你的主页应该是这样的:

var naviview = FindViewById<NavigationView>(Resource.Id.nav_view);
naviview.NavigationItemSelected += (sender, e) =>
{
    e.MenuItem.SetChecked(true);
    FragmentTransaction transaction1 = this.FragmentManager.BeginTransaction();
    switch (e.MenuItem.TitleFormatted.ToString())
    {
        case "Home":
            HomeFragment home = new HomeFragment();
            transaction1.Replace(Resource.Id.framelayout, home).AddToBackStack(null).Commit();
            break;

        case "About Us":
            VideoFragment video = new VideoFragment();
            transaction1.Replace(Resource.Id.framelayout, video).AddToBackStack(null).Commit();
            break;
    }
    drawerLayout.CloseDrawers();
};
相关问题