Как автоматически переключать viewpager? - PullRequest
0 голосов
/ 14 июня 2019

Как заставить его автоматически просматривать пейджер за несколько секунд? Я пробовал несколько способов, но все равно не получилось, когда viewpager изменился

Сообщение об ошибке «Попытка вызвать метод интерфейса« int java.util.List.size () »для ссылки на пустой объект»

    private Handler handler;
    private int delay = 5000; //milliseconds
    private int page = 0;
    private HomeSliderPagerAdapter myAdapter;
    Runnable runnable = new Runnable() {
        public void run() {
            if (myAdapter.getCount() == page) {
                page = 0;
            } else {
                page++;
            }
            viewPager.setCurrentItem(page, true);
            handler.postDelayed(this, delay);
        }
    };

на ActivityCreated

        handler = new Handler();
        viewPager = (ViewPager) getActivity().findViewById(R.id.vPager);
        sliderImg = new ArrayList<>();

        volleyObjectResult = new VolleyObjectResult() {
            @Override
            public void resSuccess(String requestType, JSONObject response) {
                try {
                    //String images = response.getString("images");
                    JSONArray jsonArray = response.getJSONArray("banner");
                    for (int i=0; i<jsonArray.length(); i++) {
                        SliderUtil sliderUtil = new SliderUtil();
                        try {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            sliderUtil.setSliderImgUrl(jsonObject.getString("IMAGES"));
                            Log.e(TAG, "Test -> " + jsonObject.getString("IMAGES"));
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                        sliderImg.add(sliderUtil);
                    }
                    HomeSliderPagerAdapter hspa = new HomeSliderPagerAdapter(sliderImg, getActivity());
                    hspa.notifyDataSetChanged();
                    viewPager.setAdapter(hspa);
                    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                        @Override
                        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                        }

                        @Override
                        public void onPageSelected(int position) {
                            page = position;
                        }

                        @Override
                        public void onPageScrollStateChanged(int state) {

                        }
                    });
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void resError(String requestType, VolleyError error) {
                Toast.makeText(getActivity(), "Network connection problem", Toast.LENGTH_LONG).show();
            }
        };
        volleyObjectService = new VolleyObjectService(volleyObjectResult, getActivity());
        volleyObjectService.postJsonObject("GETCALL", requestUrl, data);
    }

Результат: когда изображение изменяется, оно принудительно закрывается с сообщением об ошибке «Попытка вызвать метод интерфейса int java.util.List.size () для нулевой ссылки на объект»

Ответы [ 2 ]

0 голосов
/ 14 июня 2019
private void setTimer()
{
   CountDownTimer countDownTimer = new CountDownTimer(5000,2000) {
        @Override
        public void onTick(long millisUntilFinished) {

        }

        @Override
        public void onFinish() {
            if(viewPager.getCurrentItem() < arrayList.size() - 1)
            {
                viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            }
            else {
                viewPager.setCurrentItem(0);
            }
           countDownTimer.start();
        }
    };
    countDownTimer.start();
}
0 голосов
/ 14 июня 2019

Использовать пользовательский адаптер View Pager

public class SliderPagerAdapter extends PagerAdapter {
private LayoutInflater layoutInflater;
Activity activity;
List<ImageSliderModel> imageSliderModels;


public SliderPagerAdapter(Activity activity, List<ImageSliderModel> imageSliderModels) {
    this.activity = activity;
    this.imageSliderModels = imageSliderModels;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view = layoutInflater.inflate(R.layout.layout_slider, container, false);
    ImageView im_slider = (ImageView) view.findViewById(R.id.im_slider);
    String url = imageSliderModels.get(position).getImage();




    Glide.with(activity).load(imageSliderModels.get(position).getImage()).into(im_slider);

    container.addView(view);

    return view;
}

@Override
public int getCount() {
    return imageSliderModels.size();
}


@Override
public boolean isViewFromObject(View view, Object obj) {
    return view == obj;
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    View view = (View) object;
    container.removeView(view);
}

А в Activity вид вызова пейджера и адаптера

  mvViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {
            addBottomDots(i, ll_dots);
            page = i;
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
 h.postDelayed(new Runnable() {
        @Override
        public void run() {

            try {
                if (sliderPagerAdapter.getCount() == page) {
                    page = 0;
                } else {
                    page++;
                }
            }catch (Exception ignored)
            {

            }

            mvViewPager.setCurrentItem(page);
            h.postDelayed(this, 4000);
        }
    }, 1000);

И передать список в пользовательский адаптер, как это.

  sliderPagerAdapter = new SliderPagerAdapter((Activity) HomeScreen.this, imageSliderModels);
                mvViewPager.setAdapter(sliderPagerAdapter);
                sliderPagerAdapter.notifyDataSetChanged();
...