android - 如何在不滚动到第一页的情况下更新 ViewPager 中的单页内容?
问题描述
我想更新 a 中的特定页面ViewPager
,并停留在该页面上而不滚动到第一页
我试图更新数据列表并调用notifyDataSetChanged()
,但它滚动到第一页,ViewPager
没有notifyItemChanged()
as RecyclerView
。
解决方案
一些代码将有助于更好地理解问题,显示您在页面上尝试更新的内容以及您正在调用notifyDataSetChanged()
的内容。
您的问题和评论是两个独立的问题。
你在 Tab Y 并且你想更新 Tab Y
您在 Tab X 上,并且您想在更改为 Tab Y 时更新它。
通常对于问题 1,这可以在该选项卡(页面)的代码中处理
一般来说,对于问题 2,如果您想在移动到页面时执行某些操作,那么您需要添加一个OnPageChangeListener
,但这可能只是您需要执行的更新选项卡(页面)的开始。
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 1 || position == 2)
{
// do something here
}
if (position == 0)
{
// do something else
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// Code goes here
}
@Override
public void onPageScrollStateChanged(int state) {
// Code goes here
}
});
但是也没有代码,我无法判断您是否已经以某种方式实现了适配器,允许它在当前页面处于活动状态时notifyDataSetChanged()
为
https://developer.android.com/reference/androidx/viewpager/widget/PagerAdapter.html#top_of_page
PagerAdapter 支持数据集更改。数据集更改必须在主线程上发生,并且必须以调用 notifyDataSetChanged() 结束,类似于从 BaseAdapter 派生的 AdapterView 适配器。数据集更改可能涉及添加、删除或更改位置的页面。如果适配器实现 getItemPosition(Object) 方法,ViewPager 将保持当前页面处于活动状态。
推荐阅读
- asp.net-mvc - 在 Entity Framework Core 中使用 FromSqlRaw 时如何编写连接语句?
- amazon-web-services - 将 ETL 作业用于 aws 胶水时,如何控制 RDS 的摄取率?
- google-apps-script - 实施附加组件 doPost 和 doGet 触发器
- python - 你如何使用 Python xpath 从网页获取信息?
- google-bigquery - 主键同时具有整数和字符串的左连接
- javascript - 移除
使用javascript从数组中标记
- spring-boot - Spring Boot LDAP 模板查询
- sql - 为表中的控件插入创建约束
- r - 执行 kproto 后的数据帧计算
- typescript - 带有 Typescript 的功能性 Vue 组件 - 访问方法