NavigationView 获取/查找标题布局

新手上路,请多包涵

在我的 NavigationView 中,我有一个带有活动按钮的 id ‘viewId’ 的标题布局。要设置这些按钮,我在活动的 onPostCreate 中执行以下操作:

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

使用新版本的 android 支持库 ( 23.1.0 ),无法找到视图,它返回 null。使用以前的版本,它运行良好。是错误还是我使用此功能错误?如果是这样,如何访问标题布局并向其添加行为?

原文由 khusrav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

版本 23.1.0 将 NavigationView 切换为使用 RecyclerView (而不是之前的 ListView ),并将标题添加为这些元素之一。这意味着不能立即调用 findViewById() - 在将其附加到 NavigationView 之前需要布局通道。

对于支持库的 23.1.1 版本,您现在可以使用 getHeaderView() 获取对标题视图的引用:

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

这具有处理通过 XML 和代码添加的标头的优势。

如果您仍在使用 23.1.0,根据 相关的错误,您可以在代码中填充标头并使用 findViewById()

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

直到您移至 23.1.1。

原文由 ianhanniballake 发布,翻译遵循 CC BY-SA 3.0 许可协议

在java中为我工作

   navigationView = findViewById(R.id.nav_view);
    View viewHeader = navigationView.getHeaderView(0);
    ((TextView)viewHeader.findViewById(R.id.tv_name)).setText(preferences.getString(MyConstant.NAME,"n/a"));

原文由 harry 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏