首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NavigationView get/find标题布局

NavigationView get/find标题布局
EN

Stack Overflow用户
提问于 2015-10-18 13:20:53
回答 8查看 101.4K关注 0票数 177

在我的NavigationView中,我有一个带有id 'viewId‘和活动按钮的页眉布局。要设置这些按钮,我在activity的onPostCreate中执行以下操作

代码语言:javascript
复制
final View panel = findViewById(R.id.viewId);
panel.setOnClickListener(new View.OnClickListener() {
... setup goes here ...
});

使用新版本的安卓支持库(23.1.0),无法找到视图,它返回null。在以前的版本中,它工作得很好。这是一个bug,还是我用错了这个功能?如果是这样,如何访问页眉布局并向其添加行为?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-10-18 13:57:21

版本23.1.0将NavigationView切换为使用RecyclerView (而不是以前的ListView),并将报头添加为这些元素之一。这意味着它不能立即调用findViewById() -在它附加到NavigationView之前需要一个布局过程。

对于支持库的version 23.1.1,您现在可以使用getHeaderView()获取对头视图的引用

代码语言:javascript
复制
View headerLayout = navigationView.getHeaderView(0); // 0-index header

这样做的好处是可以处理通过XML和代码添加的头部。

如果你仍然使用23.1.0,根据the related bug,你可以在代码中膨胀头部,并在上面使用findViewById()

代码语言:javascript
复制
View headerLayout = 
    navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null

直到您迁移到23.1.1。

票数 445
EN

Stack Overflow用户

发布于 2015-11-14 02:49:25

现在,使用设计支持库的23.1.1发行版,您可以使用

代码语言:javascript
复制
NavigationView navigationView = (NavigationView) findViewById(R.id.your_nav_view_id);
View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);
票数 146
EN

Stack Overflow用户

发布于 2016-09-01 21:10:22

这就是我使用ButterKnife实现的方法,它对我来说很有效。

代码语言:javascript
复制
protected static class HeaderViewHolder {

    @BindView(R.id.button)
    Button button;

    HeaderViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}

然后像这样使用这个视图控制器:

代码语言:javascript
复制
View header = navigationView.getHeaderView(0);
headerViewHolder = new HeaderViewHolder(header);
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33194594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档