我在查找为什么此行引发NullPointerException异常时遇到了麻烦:

ImageView imageView1 =  (ImageView) rootView.findViewById(R.id.imageView1);


这一切都发生在一个片段中
这是片段:

public static class MyFragment extends Fragment {

    private View rootView;

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

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

        return rootView;
    }

    public void setImage(Uri imageUri) {
        ImageView imageView1 =  (ImageView) rootView.findViewById(R.id.imageView1);
        imageView1.setImageURI(imageUri);
    }
}


这是片段布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<ScrollView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</ScrollView>
</RelativeLayout>


从片段外部调用setImage()方法。

最佳答案

因此,看来您的rootViewnull;

您确定要在已调用setImage()的片段实例上调用onCreateView吗?您可以通过在两个方法中都添加println并检查控制台/ LogCat的顺序来进行测试。

您可以将代码张贴在调用setImage()的位置。

如果确实是问题所在,那就有几种解决方案,其中一些比其他的要好。对于初学者,您可以尝试将rootViewimageView1传递给调用setImage()的活动,然后将setImage()移至该活动。不是最佳做法,但请尝试一下,看看是否可行。

(本来可以发表评论,但是我没有足够的声誉。请发表评论,然后我将根据您的评论尝试编辑答案。)

10-08 14:48