ImageView.setImageResource返回NullPointerException

时间:2018-03-20 20:06:16

标签: java android xml

我在actionLayout中使用ImageView作为菜单项,但是当我尝试设置图像资源时,我得到了一个N​​PE:/我不确定我可能做错了什么,任何帮助非常感谢! :)

menu.xml文件

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

        <item
            android:id="@+id/add_note"
            android:icon="?attr/add_note_icon"
            android:title="@string/add_note"
            app:showAsAction="ifRoom"/>

        <item
            android:id="@+id/user_image"
            android:title="user_image"
            android:orderInCategory="1"
            app:actionLayout="@layout/profile_icon"
            app:showAsAction="always"/>

        <item
            android:title="@string/themes"
            android:id="@+id/themes"
            app:showAsAction="never"/>

    </menu>

profile_icon.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_gravity="center">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/profile_icon_main"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginLeft="-4dp"
        android:src="@drawable/user_image_blue"/>

</FrameLayout>

的java

CircleImageView profile_icon = (CircleImageView) findViewById(R.id.profile_icon_main);
profile_icon.setImageResource(R.drawable.user_image_black);

2 个答案:

答案 0 :(得分:0)

CircleImageView profile_icon = (CircleImageView) findViewById(R.id.profile_icon_main);
profile_icon.setImageResource(getResources().getIdentifier(user_image_black, "drawable", getPackageName()));

如果您想以编程方式设置图像,这将有效。

答案 1 :(得分:0)

您可以访问ActionView中的onCreateOptionsMenu()(及其子女)。请注意,您必须撰写actionView.findViewById(...),因为您想要访问View的{​​{1}}个孩子ActionBar而不是View的孩子Activity内容View(通常从您在setContentView()中引用的布局资源中膨胀)。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem menuItem = menu.findItem(R.id.user_image);
    View actionView = menuItem.getActionView();
    actionView.setBackgroundColor(Color.RED);

    ImageView imageView = actionView.findViewById(R.id.icon_main);
    imageView.setImageResource(R.drawable.user_image_black);
    return true;
}