何时在 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
的不同值,例如将与我的抽屉关联的 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 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
的不同值,例如将与我的抽屉关联的 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);