android - 在 ViewPager Android 中添加超过 2 个不同的视图
问题描述
是否可以在 viewpager 中添加超过 2 个视图?我将此代码添加到 Main.class:
viewPager = findViewById(R.id.viewpager);
AdapterPage adapterPage = new AdapterPage();
adapterPage.insertViewId(R.id.page_one);
adapterPage.insertViewId(R.id.page_two);
adapterPage.insertViewId(R.id.page_three);
viewPager.setAdapter(adapterPage);
PagerAdapter 类:
public class AdapterPage extends PagerAdapter {
private List<Integer> pageIds = new ArrayList<>();
public void insertViewId(@IdRes int pageId) {
pageIds.add(pageId);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
return container.findViewById(pageIds.get(position));
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return pageIds.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
}
xml:
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="500dp">
<include
android:id="@+id/page_one"
layout="@layout/detail1" />
<include
android:id="@+id/page_two"
layout="@layout/detail2" />
<include
android:id="@+id/page_three"
layout="@layout/detail3" />
</androidx.viewpager.widget.ViewPager>
此代码有效,但问题是..
- 当我滑动/滑动到名为page_three / detail3 布局的最后一页时(在这种情况下,我添加了 3 个不同的布局),加载布局需要更长的时间。
- 当我滑动/滑动回到第一页/ page_one时,布局消失了。
这种情况下是否有任何图书馆或其他观点?谢谢。
解决方案
尝试instantiateItem
根据position
. ViewPager 仅将页面 n+1 和 n-1 保存到其中 n 是实际页面的位置,这就是为什么您的第 3 页总是消失的原因。
推荐阅读
- node.js - 检索数组中子文档的 ._id
- python - 如何在 python 中获得高于和低于平均值的值?
- swift - 如何在 SwiftUI/Combine 中将订阅者附加到状态或绑定?
- typescript - 如何在 beforeEach (Knex) 中模拟 Knex
- angular - ng-content Angular中的ng-template
- database - BigQuery GENERATE_UUID() 和 CTE
- ansible - Ansible - 根据 Linux 服务状态执行任务
- spring-boot - 尝试使用 gradle 运行克隆项目但无法构建
- go - 从 Golang 中的 Twilio 获取访问令牌
- xml - 为什么这个 XSD 1.1 断言失败?