NavigationView get/find header layout

前端 未结 7 979
感情败类
感情败类 2020-11-22 02:57

In my NavigationView I have a header layout with id \'viewId\' with active buttons. To setup those buttons, I do the following in activity\'s onPostCreate:

7条回答
  •  醉话见心
    2020-11-22 03:38

    Version 23.1.0 switches NavigationView to using a RecyclerView (rather than the previous ListView) and the header is added as one of those elements. This means it is not instantly available to call findViewById() - a layout pass is needed before it is attached to the NavigationView.

    For version 23.1.1 of the Support Library, you can now get a reference to the header view using getHeaderView():

    View headerLayout = navigationView.getHeaderView(0); // 0-index header
    

    This has the advantage of working on headers added via XML and via code.

    If you are still using 23.1.0, as per the related bug, you can inflate the header in code and use findViewById() on that:

    View headerLayout = 
        navigationView.inflateHeaderView(R.layout.navigation_header);
    panel = headerLayout.findViewById(R.id.viewId);
    // panel won't be null
    

    Until you move to 23.1.1.

提交回复
热议问题