何时在 Android NavigationDrawer 中为 ImageView 设置 Resource

When to set Resource for ImageView in Android NavigationDrawer

我无法决定在哪里设置 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 将为空并且应用程序崩溃。如果我将上面的行移动到 OnPostCreate 甚至 OnStart 也是一样的。 我的理解是该视图在那个时间点尚未初始化,因此 findViewById returns 为空。作为一种解决方法,我已经覆盖了 OnDrawerOpened 方法并将我的代码从上面移动到该方法。 这工作得很好,但我很确定这不是最好的方法,因为每次打开抽屉时都会调用该方法。相反,我需要一个在创建抽屉时只调用一次的方法。

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

我尝试省略 view. 并尝试使用 view 的不同值,例如将与我的抽屉关联的 NavigationViewDrawerLayout 分配给它,但是它不能解决问题。

试试这个:

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);