Эй, ребята, застряли в этом исключении
, пока получаете данные из 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;