java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.widget.ImageView.setImageResource(int)”

时间:2018-10-27 16:25:05

标签: android nullpointerexception findviewbyid

我正在使用折叠视差,在坐标布局内,我有一个id:imageViewTest的元素,位于此文件中:activity_company_detail.xml

<android.support.design.widget.AppBarLayout
    ...>

    <android.support.design.widget.CollapsingToolbarLayout
        ...
        >

        <ImageView
                android:id="@+id/imageViewTest"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:srcCompat="@android:color/darker_gray"
                tools:ignore="ContentDescription"/>

    <android.support.v7.widget.Toolbar
        .../>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_company_detail"/>

在片段类中,我尝试通过view.findViewById(...)方法将该元素称为R.id.imageViewTest,该元素在该片段的活动中,有必要以编程方式更改其功能。 CompanyDetailActivityFragment.java

private View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
....
view = inflater.inflate(R.layout.fragment_company_detail, container, false);
ImageView  imageViewPrueba = (ImageView)view.findViewById(R.id.imageViewTest);
imageViewPrueba.setImageResource(R.mipmap.ic_logo_promo);
...
}

当尝试使用此元素时,出现以下错误:    引起原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.widget.ImageView.setImageResource(int)”。

尝试使用getActivity.findViewById(),但我仍然遇到问题

对不起,我的英语。

感谢@ Kiryl-Tkach的帮助。

已解决

在活动中:CompanyDetailActivity.java

public void setImageDrawable(){
    ImageView  imageViewPrueba = (ImageView) findViewById(R.id.imageViewPrueba);
    imageViewPrueba.setImageDrawable(...));
}

在片段中:CompanyDetailActivityFragment.java

@Override
public View onCreateView(){
...
((CompanyDetailActivity)getActivity()).setImageDrawable();
...
}

1 个答案:

答案 0 :(得分:1)

您不能执行此操作,因为它不在您的片段布局中。查看您的方法:view.findViewById(R.id.imageViewPrueba);。您正在其 view 对象中查看它,该对象的布局为@layout/content_company_detail,并且对其活动一无所知。您需要做的就是在活动setImageResource中创建方法,然后从片段中调用它。请记住,您的片段仅应操作自己的视图,而与其他视图一起操作的最佳实践是调用其他活动和片段的方法。