首页 > 解决方案 > Fragment 无法转换为 Context(应用程序立即崩溃)

问题描述

我知道以前有很多类似措辞的问题,但对我没有任何帮助。

基本上,我有一个名为 HomeFragment的片段。我想在其中显示一个图像滑块。每个图像都有一个标题和艺术家(TextView)。

这是我得到的错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)”

故障线路:

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;
}}

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);
    }
}

幻灯片.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;
    }
}

我怎样才能解决这个问题?

标签: androidandroid-fragmentsnullpointerexceptionandroid-contextnull-pointer

解决方案


推荐阅读