如何在使用 NavigationView.addHeaderView() 添加更新的 NavHeader 视图时删除现有的 NavHeader 视图?

How to delete existing NavHeader view while adding an updated one using NavigationView.addHeaderView()?

我在抽屉式布局中有一个 NavigationView,其中包含一个 HeaderView 后跟一个菜单(如 AndroidStudio 的 Navigation Drawer Activity 模板中所给)。我的 Header 在 LinearLayout 中包含一个图像和几个 TextView。我想从 SharedPreferences 编辑 header 中的一个 TextView。我使用以下函数来做到这一点

public void navUpdate()
{
        navigationView=(NavigationView)findViewById(R.id.nav_view);
        linearLayout=(LinearLayout) LayoutInflater.from(this).inflate(R.layout.nav_header_main, null);
        textView_nname=(TextView)linearLayout.findViewById(R.id.textView_nname);


        String name=sharedPreferences.getString("name","Your Name");
        textView_nname.setText(name);

        navigationView.removeHeaderView(linearLayout);
        navigationView.addHeaderView(linearLayout);
}

问题是,虽然我添加了行

navigationView.removeHeaderView(linearLayout);

我以前的 header 视图在新视图上方仍然可见。并且上一个没有更新。我在许多答案中读到了 navigationview.getHeaderAt() 方法,但相信我,该方法不可用。

Here's how it looks

这个问题有解决办法吗,如果没有,还有其他办法吗?

为了让您从 NavigationView 获得 Header,您必须调用 getHeaderView(int index) 例如:

View headerView = navigationView.getHeaderView(0);
textView_nname = (TextView)headerView.findViewById(R.id.textView_nname);
// set whatever you like on the textView.