【问题标题】:How can i fix IndexOutOfBoundsException error in Adapter on Android [duplicate]如何修复 Android 上 Adapter 中的 IndexOutOfBoundsException 错误 [重复]
【发布时间】:2018-11-03 06:49:31
【问题描述】:

在我的应用程序中,我想使用viewpager 显示来自服务器的一些数据。
我写了下面的代码,但是当 viewpager pages 之间滑动 时,viewpager adapter!

中显示错误

我的适配器代码:

public class HomeRecentPostAdapter extends EnchantedViewPagerAdapter {

    Context context;
    LayoutInflater inflater;
    ArrayList<PostsItem> model;
    View view;

    public HomeRecentPostAdapter(Context context, ArrayList<PostsItem> model) {
        super(model);
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.model = model;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        if (model.size() == 0) return null;
        view = this.inflater.inflate(R.layout.home_recent_post_row, container, false);

        ImageView homePageRecentRow_img = view.findViewById(R.id.homePageRecentRow_img);

        Glide.with(context)
                .load(model.get(position).getThumbnailImages().getFull().getUrl())
                .into(homePageRecentRow_img);

        view.setTag(EnchantedViewPager.ENCHANTED_VIEWPAGER_POSITION + position);

        container.addView(view);
        return view;
    }

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

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

    @Override
    public int getItemPosition(Object object) {
        return 5;
    }
}

我的填充适配器活动代码:

@Override
public void setRecentPostResponse(Response<RecentPostResponse> getRecentPostResponse) {
    model.clear();
    model.addAll(getRecentPostResponse.body().getPosts());
    homePage_recentViewPager.useScale();
    homePage_recentViewPager.useAlpha();
    homeRecentPostAdapter.notifyDataSetChanged();
    homeRecentPostAdapter.enableCarrousel();
    homePage_recentViewPager.setAdapter(homeRecentPostAdapter);
    homePage_recentViewPager.setCurrentItem(2);
}

强制关闭错误:

Process: example.in.videogaming, PID: 24652
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
    at java.util.ArrayList.get(ArrayList.java:411)
    at example.in.videogaming.Pages.Home.HomeRecentPostAdapter.instantiateItem(HomeRecentPostAdapter.java:48)
    at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
    at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1224)
    at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
    at androidx.viewpager.widget.ViewPager$3.run(ViewPager.java:273)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
    at android.view.Choreographer.doCallbacks(Choreographer.java:683)
    at android.view.Choreographer.doFrame(Choreographer.java:616)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)

adapter 中显示此行的错误:

.load(model.get(position).getThumbnailImages().getFull().getUrl())

我该如何解决?

【问题讨论】:

  • 覆盖这个方法“getItemCount()”并返回“model.size()”。它将解决问题。

标签: java android android-viewpager android-adapter


【解决方案1】:

试试这个:

@Override
public int getItemPosition(Object object) {
    return model.size();
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2018-06-17
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多