我在我的应用中使用了导航视图。导航视图中的标题重复两次,但实际上我在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);
标题如下
如果从图像按钮中删除了headerView,则会出现NullPointerException错误 任何建议或解决方案都将不胜感激
答案 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 ,则标题将重复两次。