Android 无法将片段转换为上下文(应用程序立即崩溃)
我知道以前有很多类似的问题,但对我来说都不管用 基本上,我有一个名为HomeFragment的片段。我想在其中显示一个图像滑块。每个图像上都有一个标题和艺术家(TextView) 这是我得到的错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.viewpager.widget.viewpager.setAdapter(androidx.viewpager.widget.PagerAdapter)” 故障线路:Android 无法将片段转换为上下文(应用程序立即崩溃),android,android-fragments,nullpointerexception,android-context,null-pointer,Android,Android Fragments,Nullpointerexception,Android Context,Null Pointer,我知道以前有很多类似的问题,但对我来说都不管用 基本上,我有一个名为HomeFragment的片段。我想在其中显示一个图像滑块。每个图像上都有一个标题和艺术家(TextView) 这是我得到的错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.viewpager.widget.viewpager.setAdapter(androidx.viewpager.widget.PagerAdapter)” 故障线路: Slid
SliderPagerAdapter adapter = new SliderPagerAdapter(getActivity().getApplicationContext(),lstSlides);
sliderpager.setAdapter(adapter);
如果我将mContext.this与活动而不是片段一起使用,则代码可以工作。我试着使用getContext()和getActivity(),就像我在其他问题中经常看到的那样,但我的应用程序还是立即崩溃了
HomeFragment.java
public class HomeFragment extends Fragment {
private List<Slide> lstSlides;
private ViewPager sliderpager;
private static final String TAG = "HomeFragment";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_home,container,false);
//Slider pictures(inside drawable), song names(title) ve artist names(artist)
lstSlides = new ArrayList<>();
lstSlides.add(new Slide(R.drawable.slide1long,"SlideTitle1","SlideArtist1"));
lstSlides.add(new Slide(R.drawable.slide2long,"SlideTitle2","SlideArtist2"));
lstSlides.add(new Slide(R.drawable.slide3long,"SlideTitle3","SlideArtist3"));
lstSlides.add(new Slide(R.drawable.slide4long,"SlideTitle4","SlideArtist4"));
lstSlides.add(new Slide(R.drawable.slide5long,"SlideTitle5","SlideArtist5"));
lstSlides.add(new Slide(R.drawable.slide6long,"SlideTitle6","SlideArtist6"));
lstSlides.add(new Slide(R.drawable.slide7long,"SlideTitle7","SlideArtist7"));
lstSlides.add(new Slide(R.drawable.slide8long,"SlideTitle8","SlideArtist8"));
lstSlides.add(new Slide(R.drawable.slide9long,"SlideTitle9","SlideArtist9"));
lstSlides.add(new Slide(R.drawable.slide10long,"SlideTitle10","SlideArtist10"));
SliderPagerAdapter adapter = new SliderPagerAdapter(getActivity().getApplicationContext(),lstSlides);
sliderpager.setAdapter(adapter);
return view;
}}
public class SliderPagerAdapter extends PagerAdapter {
private Context mContext;
private List <Slide> mList;
public SliderPagerAdapter(Context mContext, List<Slide> mList) {
this.mContext=mContext;
this.mList=mList;
}
//Slider information artist,title,pictures etc
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View slideLayout = inflater.inflate(R.layout.slide_item,null);
ImageView slideImg = slideLayout.findViewById(R.id.slide_img);
TextView slideText = slideLayout.findViewById((R.id.slide_title));
TextView slideText2 = slideLayout.findViewById(R.id.slide_artist);
slideImg.setImageResource(mList.get(position).getImage());
slideText.setText(mList.get(position).getTitle());
slideText2.setText(mList.get(position).getArtist());
container.addView(slideLayout);
return slideLayout;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
public class Slide {
private int Image;
private String Title;
private String Artist;
public Slide(int image, String title, String artist) {
Image = image;
Title = title;
Artist = artist;
}
public int getImage() {
return Image;
}
public void setImage(int image) {
Image = image;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getArtist() {
return Artist;
}
public void setArtist(String artist) {
Artist = artist;
}
}
如何修复此问题?您没有初始化
sliderPage
。另外,只需在sliderPage适配器
构造函数中使用getActivity()
,而不是getActivity().getApplicationContext()
–确保您的版面以适当的主题展开。您没有为SliderPage
赋值。您拥有该字段,但没有为其赋值。如果它位于fragment\u home
layout资源中,您应该调用findViewById()
从膨胀的布局中检索它。“viewpager不在fragment\u home中,它在名为slider\u pager.xml的布局文件中”——您似乎没有膨胀该布局,因此,我不认为您的片段会有ViewPager
。我将我的ViewPager从slider\u pager
复制到fragment\u home
,问题就解决了。谢谢你们两位。