java.lang.NullPointerException:尝试在空对象引用上调用虚方法 'void android.widget.ImageView.setImageResource (int)'
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource (int)' on a null object reference
我正在处理折叠视差,在坐标布局中我有一个带有 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"/>
在片段class中我尝试通过方法view.findViewById调用这个元素R.id.imageViewTest(...),这个元素在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 的帮助。
已解决:
在activity中:CompanyDetailActivity.java
public void setImageDrawable(){
ImageView imageViewPrueba = (ImageView) findViewById(R.id.imageViewPrueba);
imageViewPrueba.setImageDrawable(...));
}
片段中:CompanyDetailActivityFragment.java
@Override
public View onCreateView(){
...
((CompanyDetailActivity)getActivity()).setImageDrawable();
...
}
您不能这样做,因为它不在您的片段布局中。看你的方法:view.findViewById(R.id.imageViewPrueba);
。您正在 view 对象中查看它,该对象具有布局 @layout/content_company_detail
,但它对其 activity 一无所知。您需要做的就是在 activity setImageResource 中创建方法并从您的片段中调用它。请记住,您的片段只能操作自己的视图,操作其他视图的最佳做法是调用其他活动和片段的方法。
我正在处理折叠视差,在坐标布局中我有一个带有 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"/>
在片段class中我尝试通过方法view.findViewById调用这个元素R.id.imageViewTest(...),这个元素在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 的帮助。
已解决:
在activity中:CompanyDetailActivity.java
public void setImageDrawable(){
ImageView imageViewPrueba = (ImageView) findViewById(R.id.imageViewPrueba);
imageViewPrueba.setImageDrawable(...));
}
片段中:CompanyDetailActivityFragment.java
@Override
public View onCreateView(){
...
((CompanyDetailActivity)getActivity()).setImageDrawable();
...
}
您不能这样做,因为它不在您的片段布局中。看你的方法:view.findViewById(R.id.imageViewPrueba);
。您正在 view 对象中查看它,该对象具有布局 @layout/content_company_detail
,但它对其 activity 一无所知。您需要做的就是在 activity setImageResource 中创建方法并从您的片段中调用它。请记住,您的片段只能操作自己的视图,操作其他视图的最佳做法是调用其他活动和片段的方法。