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

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

使用新版本的Android支持库(23.1.0),找不到视图,它返回NULL.在以前的版本中,它工作得很好.是错误还是我用错了这个功能?如果是,如何访问页眉布局并向其添加行为?

推荐答案

版本23.1.0将NavigationView切换为使用RecyclerView(而不是之前的ListView),并将标题添加为这些元素之一.这意味着它不能立即拨打findViewById()——在连接到NavigationView之前需要一个布局通行证.

对于version 23.1.1个支持库,现在可以使用getHeaderView()获得标题视图的引用:

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

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

如果您仍在使用23.1.0,按照the related bug,您可以在代码中为标题充气,并在其上使用findViewById():

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

直到你转到23.1.1.

Android相关问答推荐

Android深度链接配置中的URL片段匹配'

无法在Jetpack Compose中显示Admob原生广告

约束布局:垂直链中的视图应将内容包裹到空间的1/3

Kotlin Android VS Kotlin多平台

在androidStudio中,如何使用带有ResolutionStrategy的ResolutionSelector而不是setTargetResolve()?

如何在使用带有底部导航组件的片段管理器时更改片段工具栏的标签

页面更改时不显示 cogo toast 消息

如何迭代 SqlDelight Select 结果而不将所有内容加载到内存中?

使用不同的gradle文件导入外部库

将 React Native 应用程序背景带到前台

当 EditText 用于在 android studio 中将字符串发送到 firebase 时,仅允许安全调用错误

setContentView() 方法的签名

PullRefreshIndicator 与 ScrollableTabRow 重叠

Jetpack compose 为网络检索视频帧导致延迟

如何在 Jetpack Compose 中为中心对齐设置动画?

如何将设备屏幕位置转换为发送事件位置?

Android Studio 错误要求依赖它的库和应用程序针对 Android API 的 33 版或更高版本进行编译.

Android Compose 创建抖动动画

如何在 Android Studio 中使用 Github Copilot?

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时