I know that there are a lot of similarly phrased questions before, but nothing worked for me.
Basically, I have a fragment called HomeFragment. I want to show an image slider in it. Every image has a title and artist on it(TextView).
This is the error I got:
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)' on a null object reference
Faulty Line:
SliderPagerAdapter adapter = new SliderPagerAdapter(getActivity().getApplicationContext(),lstSlides);
sliderpager.setAdapter(adapter);
The code works if I use mContext.this with an activity instead of a fragment. I tried using getContext() and getActivity() as I constantly see in other questions but my app crashes immediately nevertheless.
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;
}}
SliderPagerAdapter.java
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);
}
}
Slide.java
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;
}
}
How can I fix this?