onCreateView寻呼机适配器

问题描述 投票:0回答:1

尝试在空对象引用上调用虚拟方法'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)'

我正在尝试使用android材质设计实现滑动标签布局。但这给了我NullPointerException。到目前为止,这是我的代码:

公共类HomeFragment扩展Fragment {

private HomeViewModel homeViewModel;
private List<Slide> listSlides;
private ViewPager slidePager;
private TabLayout indicator;


 public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel.class);
    View root = inflater.inflate(R.layout.fragment_home, container, false);

     listSlides = new ArrayList<>();
     listSlides.add(new Slide(R.drawable.a, "slide title"));
     listSlides.add(new Slide(R.drawable.b, "slide title"));

     final SliderPagerAdapter adapter = new SliderPagerAdapter(getContext(), listSlides);

     homeViewModel.getText().observe(this, new Observer<String>() {
         @Override
         public void onChanged(@Nullable String s) {
             slidePager.setAdapter(adapter);
         }
     });



    return root;

}

}

公共类SliderPagerAdapter扩展了PagerAdapter {

private Context mText;
private List<Slide> mList;

public SliderPagerAdapter(Context mText, List<Slide> mList) {
    this.mText = mText;
    this.mList = mList;
}


@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {


    LayoutInflater inflater = (LayoutInflater) mText.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View slideLayout = inflater.inflate(R.layout.slider_item,null);

    ImageView slideImg = slideLayout.findViewById(R.id.slide_img);
    TextView slideText= slideLayout.findViewById(R.id.slide_title);

    slideImg.setImageResource(mList.get(position).getImage());
    slideText.setText(mList.get(position).getTitle());

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

}

android android-viewpager fragment fragment-oncreateview
1个回答
0
投票
您没有实例化slidePager,因此当您尝试设置setAdapter时,它实际上是一个空对象。您应该在findViewById上调用ViewPager
© www.soinside.com 2019 - 2024. All rights reserved.