导航视图获取/查找标头布局

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

在我的导航视图中,我有一个带有id‘viewId’的标题布局,带有活动按钮。要设置这些按钮,我在活动的onPostCreate:

final View panel = findViewById(R.id.viewId);
panel.setOnClickListener(new View.OnClickListener() {
... setup goes here ...
});

新版本的Android支持库,则无法找到该视图,它将返回NULL。在以前的版本中,它运行得很好。这是一个错误,还是我使用了这个功能错误?如果是,如何访问标题布局并向其添加行为?

提问于
用户回答回答于

NavigationView使用RecyclerView(而不是以前的ListView),并将头作为这些元素之一添加。这意味着它无法立即调用。findViewById()-在将布局通行证附加到NavigationView

在SupportLibrary中,现在可以使用以下方法获得对标头视图的引用getHeaderView():

View headerLayout = navigationView.getHeaderView(0); // 0-index header

这样做的优点是可以处理通过XML和代码添加的标题。

以在代码中膨胀标题并使用findViewById()关于这一点:

View headerLayout = 
    navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null

直到你移动到23.1.1。

用户回答回答于

现在,在23.1.1版本的设计支持库中,可以使用

NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id);
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);

扫码关注云+社区