导航视图中的标题重复android

时间:2016-03-02 18:56:55

标签: android navigationview android-navigationview

我在我的应用中使用了导航视图。导航视图中的标题重复两次,但实际上我在xml中删除了它( app:headerLayout =" @ layout / 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 repetition

如果从图像按钮中删除了headerView,则会出现NullPointerException错误 任何建议或解决方案都将不胜感激

6 个答案:

答案 0 :(得分:2)

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

之后你可以这样做 -

在应用程序中添加headerview:headerLayout =“@ layout / header”在NavigationView中。

然后,您可以通过

访问它
    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

答案 1 :(得分:2)

    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 

答案 2 :(得分:1)

我在使用NavigationView标题时也获得了NPE,我在布局app:headerLayout="@layout/header"中添加标题了

为了摆脱这个NPE,我开始以编程方式添加标题,如下所示<
p>

View header = LayoutInflater.from(this).inflate(R.layout.bp_header, null);
mNavigationView.addHeaderView(header);
googele_plus = (ImageButton) header.findViewById(R.id.google_p);

答案 3 :(得分:1)

好像你创建了2次标题。我有同样的问题。

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

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

答案 4 :(得分:0)

您可能会被称为导航视图标题设置功能两次。所以它创造了两次。

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

如果您去其他活动并返回,

onStart会多次调用。 所以它会创建标题多次。 或者检查您多次调用该代码的代码。

答案 5 :(得分:0)

KOTLIN 中,我通过使用以下代码实现了这一目标。

步骤1.从NavigationView中删除 app:headerLayout =“ @ layout / your_header_layout”

第2步。在您的活动中添加以下代码

var nav = nav_view.inflateHeaderView(R.layout.nav_header_home)
nav?.nav_header_title?.text = "Your text "

注意:如果您不从NavigationView中删除 app:headerLayout ,则标题将重复两次。