Header 在导航视图中重复 android

Header Repetition in navigation view android

我在我的应用程序中使用了导航视图。 Header 在导航视图中重复了两次但我实际上在 [=30= 中删除了它 (app:headerLayout="@layout/header") ].我想从 header 的导航视图中实现操作(如按钮)。

在代码中我是这样写的

    mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
    headerView = mNavigationView.inflateHeaderView(R.layout.bp_header);
    googele_plus = (ImageButton) headerView.findViewById(R.id.google_p);
    facebook = (ImageButton) headerViewfindViewById(R.id.fb);

Header 赞以下

如果 headerView 从图像按钮中删除,我会收到 NullPointerException 错误 任何建议或解决方案将不胜感激

将您的支持库更新到 23.1.1 或更高版本。

之后你可以这样做 -

在 NavigationView 中的 app:headerLayout="@layout/header" 添加标题视图。

然后,您可以通过

访问它
    mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
    View headerView = mNavigationView.getHeaderView(0)

    googele_plus = (ImageButton) headerView.findViewById(R.id.google_p);
    facebook = (ImageButton) headerView.findViewById(R.id.fb);

参考:https://code.google.com/p/android/issues/detail?id=190226#c31

好吧,我在使用 NavigationView header 时也遇到了 NPE,我在布局中添加了 headers app:headerLayout="@layout/header"

为了摆脱这个 NPE,我开始以编程方式添加 header,如下所示

View header = LayoutInflater.from(this).inflate(R.layout.bp_header, null);
mNavigationView.addHeaderView(header);
googele_plus = (ImageButton) header.findViewById(R.id.google_p);
    You may have header layout in xml and also you are adding header from java like 

    headerView = mNavigationView.inflateHeaderView(R.layout.bp_header);

    So just remove above line from java and add it through the xml
    You can add following in your xml       

 <include
 android:id="@+id/header"
 layout="@layout/navigation_header" />

     and then in java create ref like below          



      googele_plus = (ImageButton) findViewById(R.id.google_p);
         facebook = (ImageButton) findViewById(R.id.fb);

     Clean and Build the project and then run 

您似乎创建了 header 2 次。我有同样的问题。

 headerView = mNavigationView.inflateHeaderView(R.layout.bp_header);

这一行 ^ 实际上在运行时创建了新视图。我相信您在 XML 中创建了相同的 header。尝试从 XML 中删除 headerView。那会解决你的问题。

您可能会调用该导航视图header 设置函数两次。所以它创建了两次。

如果您在 onStart() 方法中编写了该设置导航 header 视图,请删除并在 onCreate() 方法中写入。

如果您转到其他 activity 并返回,onStart 将调用多次。 所以它会创建 header 次。 或者检查您多次调用该代码的代码。

KOTLIN 中,我使用以下代码实现了。

第 1 步。从 NavigationView 中删除 app:headerLayout="@layout/your_header_layout"

第 2 步。在您的 activity

中添加以下代码
var nav = nav_view.inflateHeaderView(R.layout.nav_header_home)
nav?.nav_header_title?.text = "Your text "

注意:如果您不从 NavigationView 中删除 app:headerLayout,那么 header 将重复两次。