Android support v23.1.0 update breaks NavigationView get/find header

后端 未结 5 652
野趣味
野趣味 2020-12-03 01:27

I have been using the v23.0.1 support library until now with no problems. Now when I switch to the new v23.1.0 library I am getting a null

5条回答
  •  鱼传尺愫
    2020-12-03 01:31

    With the design library v 23.1.0 the NavigationView works with a RecyclerView.
    Also the Header is now a type of row.

    It means that the header could not be immediately available in the view hierarchy.
    It can cause issues if you are using methods like navigationView.findViewById(XXX) to get a view inside the header.

    There is a bug in the Google Tracker.

    EDIT 12/10/2015: Design library 23.1.1

    The 23.1.1 introduces a new API for retrieving header views for NavigationView with getHeaderView()

    BEFORE 23.1.1

    workaround fot 23.1.0 can be to use a addOnLayoutChangeListener. Somenthing like:

    navigationView.addOnLayoutChangeListener( new View.OnLayoutChangeListener()
    {
        @Override
        public void onLayoutChange( ... )
        {
            navigationView.removeOnLayoutChangeListener( this );
    
            View view = navigationView.findViewById( ... );
        }
    } );
    

    Another possible workaround are:

    • remove the app:headerLayout attribute from the xml, and then add the header programatically.

    • Inflate the headerView programmatically.

    Use somenthing like this:

    View headerLayout = navigationView.inflateHeaderView(R.layout.navigation_header);
    headerLayout.findViewById(xxx);
    

提交回复
热议问题