Исключение при попытке отобразить изображения в ViewPager из FIrebase - PullRequest
0 голосов
/ 30 сентября 2018

Эй, ребята, застряли в этом исключении

, пока получаете данные из FirebaseDatabase и отображаете их в адаптере Viewpager в качестве баннера

Я использую UltraViewPager Библиотека для отображенияпейджер просмотра

, но каждый раз, когда я пытаюсь отобразить данные, мне представляется это исключение

   E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.team.plustegara, PID: 26162
                  java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 400 Pager id: 1 Pager class: class com.tmall.ultraviewpager.UltraViewPagerView Problematic adapter: class com.tmall.ultraviewpager.UltraViewPagerAdapter
                      at android.support.v4.view.ViewPager.populate(ViewPager.java:1137)
                      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:663)
                      at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:625)
                      at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:617)
                      at com.tmall.ultraviewpager.UltraViewPagerView.setCurrentItemFake(UltraViewPagerView.java:245)
                      at com.tmall.ultraviewpager.UltraViewPager.scrollNextPage(UltraViewPager.java:400)
                      at com.tmall.ultraviewpager.UltraViewPager$2.callBack(UltraViewPager.java:302)
                      at com.tmall.ultraviewpager.TimerHandler.handleMessage(TimerHandler.java:60)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

я помещаю ViewPager во фрагмент, который называется News.java

Здесьмой адаптер

SliderBaseAdapter.java

public class SliderBaseAdapter extends PagerAdapter {


    @BindView(R.id.text)
    TextView textView;
    @BindView(R.id.imgSlides)
    ImageView imgSlides;
    @BindView(R.id.progressBar)
    ProgressBar progressBar;

    private List<SliderModels> imageModelArrayList;
    private Context context;
    private LayoutInflater inflater;

    public SliderBaseAdapter(List<SliderModels> imageModelArrayList, Context context) {
        this.imageModelArrayList = imageModelArrayList;
        this.context = context;
        inflater = LayoutInflater.from(context);

    }




    @SuppressLint("CheckResult")
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup view, int position) {
        View convertView   = inflater.inflate(R.layout.text_item, view, false);

        //Butter View Bind
        if (convertView != null) {
            ButterKnife.bind(this, view);
        }

        FadingCircle fadingCircle = new FadingCircle();
        progressBar.setIndeterminateDrawable(fadingCircle);

        SliderModels listy = imageModelArrayList.get(position);

        assert convertView != null;

        textView.setText(listy.getTitle());

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.diskCacheStrategy(DiskCacheStrategy.ALL);

        GlideApp.with(context)
                .load(listy.getImage())
                .transition(withCrossFade())
                .placeholder(R.drawable.gradients_card)
                .apply(requestOptions)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        progressBar.setVisibility(View.GONE);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        progressBar.setVisibility(View.GONE);
                        return false;
                    }
                })
                .into(imgSlides);

        assert view != null;
        view.addView(convertView,0);


        return convertView;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }

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

    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    public synchronized void refreshData(@NonNull List<SliderModels> list){

        imageModelArrayList = new ArrayList<>(list);
        notifyDataSetChanged();
    }
}

- это метод, который анализирует данные в списке из базы данных FirebaseDatabase

Новости.java

private void parsSlides() {


        listSLides.clear();

        DatabaseReference dbSLidesRef = FirebaseDatabase.getInstance().getReference("PlusTeam");
        dbSLidesRef.child("Slides").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {

                    banner.setVisibility(View.VISIBLE);

                    for (DataSnapshot dt : dataSnapshot.getChildren()) {

                        SliderModels models = dt.getValue(SliderModels.class);
                        listSLides.add(models);
                  sliderBaseAdapter.refreshData(listSLides);
                        Log.d(TAG, "Models: " + models);
                    }
                    Collections.reverse(listSLides);
                } else {
                    banner.setVisibility(View.GONE);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


        sliderBaseAdapter = new SliderBaseAdapter(listSLides, getActivity());
        ultra_viewpager.setAdapter(sliderBaseAdapter);
    }

пейджер просмотра, введенный ButterKnife

@ BindView (R.id.ultra_viewpager) UltraPagerView ultra_viewpager;

...