【问题标题】:NullPointerException while setting image in a Fragment in Android在 Android 的 Fragment 中设置图像时出现 NullPointerException
【发布时间】:2017-02-20 13:59:01
【问题描述】:

我正在尝试从 Fragment 的 ImageView 内的可绘制对象中设置图像。上面的代码在该行抛出一个NullPointerException

imageView.setImageResource(R.drawable.featured_one);

public class FeaturedTwo extends Fragment {

    ImageView imageView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.featured_one, container, false);

        imageView = (ImageView) rootView.findViewById(R.id.featured_two_image);

        imageView.setImageResource(R.drawable.featured_one);

        return rootView;

    }
}

请帮我找到解决办法。

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
                                                                                   at com.example.anandzoom.appytizertest.FeaturedTwo.onCreateView(FeaturedTwo.java:28)
                                                                                   at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189)
                                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                                                                                   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)

featured_one 的 XML,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/featured_one_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />

</LinearLayout>

【问题讨论】:

  • 看我的编辑使用 setImageDrawable() 喜欢它

标签: android android-fragments nullpointerexception


【解决方案1】:

在 Fragment 中使用视图的上下文而不是 getActivity()

编辑:并更正您的 imageview id 使用 features_one_image 而不是 features_one_image。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.featured_one, container, false);
    imageView = (ImageView) rootView.findViewById(R.id.featured_one_image);

    // set drawable image like it
    imageView.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.featured_one));


    return rootView;

}

【讨论】:

  • 我在 imageView.setImageResource(R.drawable.featured_one); 处仍然遇到同样的异常;
  • @Anand Kumar 检查 setImageDrawable() 方法的编辑
  • 仍然抛出 NullPointerException....java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)'
  • 非常感谢...现在知道了 :)
  • wlcm 朋友喜欢安卓!!
【解决方案2】:

您需要在片段中而不是在父活动中找到您的视图。

直接替换

imageView = (ImageView) getActivity().findViewById(R.id.featured_one_image);

imageView = (ImageView) rootView.findViewById(R.id.featured_two_image);

【讨论】:

  • 我在 imageView.setImageResource(R.drawable.featured_one); 处仍然遇到同样的异常;
  • 你可以为featured_one粘贴xml文件吗
  • 非常感谢...我现在知道了 :)
【解决方案3】:

使用rootView.findViewById 而不是getActivity,因为您的布局在片段内部而不是在活动内部。

您的 id 也有误,在您的 xml 中命名为“featured_one_image”,但您得到的是“featured_two_image”。

所以改变你的代码 imageView = (ImageView) rootView.findViewById(R.id.featured_two_image);imageView = (ImageView) rootView.findViewById(R.id.featured_one_image);

【讨论】:

    【解决方案4】:

    而不是这个:

    imageView = (ImageView) getActivity().findViewById(R.id.featured_two_image);
    

    使用这个:

    imageView = (ImageView) rootView.findViewById(R.id.featured_two_image);
    

    【讨论】:

      【解决方案5】:

      你需要从你的 rootView 中找到 ImageView。

      打电话

      imageView = (ImageView) rootView.findViewById(R.id.featured_one_image);

      编辑:rootView 中的 ImageView 是 featured_one_image,而不是 featured_two_image

      【讨论】:

      • 我在 imageView.setImageResource(R.drawable.featured_one); 处仍然遇到同样的异常;
      • @AnandKumar 致电imageView = (ImageView) rootView.findViewById(R.id.featured_one_image);
      猜你喜欢
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多