【问题标题】:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource (int)' on a null object referencejava.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageResource (int)”
【发布时间】:2018-10-27 16:25:05
【问题描述】:

我正在处理折叠视差,在坐标布局内我有一个带有 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"/>

在fragment类中我尝试通过方法view.findViewById(...)调用这个元素R.id.imageViewTest,这个元素在这个fragment的activity中,需要以编程方式更改其功能。 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();
...
}

【问题讨论】:

    标签: android nullpointerexception findviewbyid


    【解决方案1】:

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

    【讨论】:

    • 谢谢你的回答,我正在测试它,当我从片段中调用我的活动方法时,我有疑问。活动: public void setImageResource(int i){ ImageView imageViewPrueba = (ImageView) findViewById(R.id.imageViewPrueba); imageViewPrueba.setImageResource(i); }
    • @Fahed Hermoza 最好在您的主要活动中保留 imageView 变量:private ImageView imageView;。在活动onCreate方法中:imageView = findViewById(R.id.imageViewPrueba);,和create方法public void setImageResource(int i){ imageView.setImageResource(i); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2020-09-17
    • 2015-04-20
    • 2015-08-17
    • 2019-01-21
    • 2014-04-15
    相关资源
    最近更新 更多