Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法将片段转换为上下文(应用程序立即崩溃)_Android_Android Fragments_Nullpointerexception_Android Context_Null Pointer - Fatal编程技术网

Android 无法将片段转换为上下文(应用程序立即崩溃)

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

我知道以前有很多类似的问题,但对我来说都不管用

基本上,我有一个名为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;
}}
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
,问题就解决了。谢谢你们两位。