无法使用主活动中的导航视图在导航栏中设置textview。 Xamarin Android

时间:2018-02-15 20:41:36

标签: xamarin.android

这是我设置所有图标,菜单,抽屉和导航视图的主要活动。在这里,我通过将nav_header充气到视图并设置textview来设置另一个视图,但我似乎仍然无法更改导航抽屉中的textview。 的 MainActivity

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Support.V4.Widget;
using Android.Views;    
using RoutineApp.Fragments;
using Android.Support.V7.App;
using Android.Support.V4.View;
using Android.Support.Design.Widget;
using Android.Widget;
using Android.Content;

namespace RoutineApp
{
    [Activity(Label = "@string/app_name", MainLauncher = true, LaunchMode = LaunchMode.SingleTop)]
    public class MainActivity : AppCompatActivity
    {

        DrawerLayout drawerLayout;
        NavigationView navigationView;    
        IMenuItem previousItem;
        TextView UserNameTxt;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.main);
            var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            if (toolbar != null)
            {
                SetSupportActionBar(toolbar);
                SupportActionBar.SetDisplayHomeAsUpEnabled(true);
                SupportActionBar.SetHomeButtonEnabled(true);
            }    
            drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);  
            SupportActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu);
            navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
            LayoutInflater inflater = (LayoutInflater)GetSystemService(Context.LayoutInflaterService);
            View view = inflater.Inflate(Resource.Layout.nav_header, null);
            UserNameTxt = view.FindViewById<TextView>(Resource.Id.UserNameTxt);
            UserNameTxt.Text = "Yousuf";
            navigationView.NavigationItemSelected += (sender, e) =>
            {
                if (previousItem != null)
                    previousItem.SetChecked(false);

                navigationView.SetCheckedItem(e.MenuItem.ItemId);    
                previousItem = e.MenuItem;    
                switch (e.MenuItem.ItemId)
                {
                    case Resource.Id.nav_home_1:
                        ListItemClicked(0);
                        break;

                    case Resource.Id.nav_home_2:
                        ListItemClicked(1);
                        break;
                }
                drawerLayout.CloseDrawers();
            };
            if (savedInstanceState == null)
            {
                navigationView.SetCheckedItem(Resource.Id.nav_home_1);
                ListItemClicked(0);
            }
        }
        int oldPosition = -1;
        private void ListItemClicked(int position)
        {
            if (position == oldPosition)
                return;
            oldPosition = position;
            Fragment fragment = null;
            switch (position)
            {
                case 0:
                    fragment = Fragment1.NewInstance();
                    break;
            }
            FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
            fragmentTx.Replace(Resource.Id.content_frame, fragment);
            fragmentTx.AddToBackStack(null);
            fragmentTx.Commit();
        }
        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Android.Resource.Id.Home:
                    drawerLayout.OpenDrawer(GravityCompat.Start);
                    return true;
            }
            return base.OnOptionsItemSelected(item);
        }
    }
}

这是主要的布局axml,导航和抽屉设置在导航中调用标题。 的 main.axml

<?xml version="1.0" encoding="utf-8"?>
<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">
<!-- The main content view -->

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar"
                app:layout_scrollFlags="scroll|enterAlways" />

        </android.support.design.widget.AppBarLayout>

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/toolbar_layout" />
    </RelativeLayout>

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

</android.support.v4.widget.DrawerLayout>

这是我在导航视图中调用的nav_header,其中包含我正在尝试更改主要活动的textview。 的 nav_header.axml

    

    <TextView
        android:id="@+id/UserNameTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Username"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
</LinearLayout>

The name doesn't change, please help.

1 个答案:

答案 0 :(得分:2)

您使用LayoutInflator来对nav_header的视图进行充气,这意味着您从nav_header.xml创建了一个全新的视图,并更改了它的子文本视图文本和在您的活动中没有使用此新视图。因此,原始活动的文本不会发生变化。

<强>溶液: 修改您的活动代码,如下所示:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.main);
    var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
    if (toolbar != null)
    {
        SetSupportActionBar(toolbar);
        SupportActionBar.SetDisplayHomeAsUpEnabled(true);
        SupportActionBar.SetHomeButtonEnabled(true);
    }    
    drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);                SupportActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_menu);
    navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
    //LayoutInflater inflater = (LayoutInflater)GetSystemService(Context.LayoutInflaterService);
    //View view = inflater.Inflate(Resource.Layout.nav_header, null);
    //UserNameTxt = view.FindViewById<TextView>(Resource.Id.UserNameTxt);
    //UserNameTxt.Text = "Yousuf";
    LinearLayout header=(LinearLayout)navigationView.GetHeaderView(0);
    UserNameTxt = header.FindViewById<TextView>(Resource.Id.UserNameTxt);
    UserNameTxt.Text = "Yousuf";
    ...