NavigationView how to handle dynamic header content

梦想与她 提交于 2019-12-21 09:36:56

问题


I have a pretty standard NavigationView. When i use a static layout in the header like below it works perfect.

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

But i want to have a dynamic header so thah i can change it when user logged in etc... So i tried to use a fragment instead of nav_header.xml

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

Can i use a fragment in the headerLayout so i can handle all my logic in the fragment's java file. Or what is the right solution to handle this problem.


回答1:


You can do that in code by inflating custom layout and set it's header for navigation view.

NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
View nav_header = LayoutInflater.from(this).inflate(R.layout.nav_header, null);
((TextView) nav_header.findViewById(R.id.name)).setText("UserName");
navigationView.addHeaderView(nav_header);

You don't need to set app:headerLayout in xml.




回答2:


You could call the header declared on xml like this:

NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);    
View header = navigationView.getHeaderView(0);

And then get the views like this:

TextView text = (TextView) header.findViewById(R.id.text);


来源:https://stackoverflow.com/questions/31580092/navigationview-how-to-handle-dynamic-header-content

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!