android - 何时在 Android NavigationDrawer 中为 ImageView 设置 Resource

标签 android null imageview navigation-drawer oncreate

我无法决定在哪里设置 Android NavigationDrawer 中包含的 ImageView 的图像。

我的 Android 应用程序有一个 NavigationDrawer,其中包含嵌套在 NavigationDrawer header 布局 (app:headerLayout="@layout/navdrawer_header) 内的几个其他元素中的 ImageView,以及我的 navdrawer_header .xml 具有以下结构:

<LinearLayout android:id="@+id/navdrawer_header">
    ...
    <ImageView android:id=@+id/image_view
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    ...
</LinearLayout>

我正在通过设置图像(img.jpg 在我的可绘制文件夹中)

ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
imageView.setImageResource(R.drawable.img);

如果从我的 MainActivity 内的 OnCreate 调用,imageView 将为 null 并且应用程序崩溃。如果我将上面的行移至 OnPostCreate 甚至 OnStart,效果也是一样。 我的理解是,该 View 当时尚未初始化,因此 findViewById 返回 null。作为解决方法,我覆盖了 OnDrawerOpened 方法,并将我的代码从上面移至该方法。 这工作得很好,但我很确定这不是最好的方法,因为每次打开抽屉时都会调用该方法。相反,我需要一个仅在创建抽屉时调用一次的方法。

这里的最佳实践是什么,即我应该在哪里设置 NavigationDrawer 中包含的 ImageView 的资源?

我尝试省略 view. 并尝试使用 view 的不同值,例如通过为其分配 NavigationView DrawerLayout 与我的抽屉关联,但它不能解决问题。

最佳答案

试试这个:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View view = navigationView.getHeaderView(0);

ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
imageView.setImageResource(R.drawable.img);

关于android - 何时在 Android NavigationDrawer 中为 ImageView 设置 Resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322825/

相关文章:

android - 无法在android中的imageview中清除或设置空白图像

java - setAlpha 动画后不恢复 alpha 值

android - RippleDrawable mask 颜色,有什么用?

java - Android 播放列表内容未找到

android - 标记元视口(viewport)

c++ - 将 NULL/0 传递给 dynamic_cast 的便携安全?

java - Android 通过 HttpPost 和 URLconnection 使用 cookie

java - (a != null) 或 (null != a)

php - 最新的前提条件测试?

ios - 如何在表格 View 单元格中调整文本标签的大小