- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Fragment[State]PagerAdapter
有点疑惑。基本上我的问题是我需要根据屏幕方向更改 ViewPager
的内容( fragment )。我阅读了很多关于此的帖子,有些人说我应该覆盖 PagerAdapter
中的 getItemPosition(Object)
。我已经这样做了,但是从未调用过该方法,而且我在 PagerAdapter
、FragmentPagerAdapter
和 FragmentStatePagerAdapter
中都找不到对它的任何调用。那里有人知道这是如何工作的并且介意解释一下吗?
目前我在我的 instantiateItem()
中做了一个丑陋的 hack 来测试我的理论,但这并不是我真正想要使用的。如您所见,如果 getItemPosition()
返回 POSITION_NONE
,我将删除 fragment 。在 getItemPosition()
中,我有一些逻辑来确定 fragment 是否仍应位于寻呼机中。
@Override
public Object instantiateItem(ViewGroup container, int position) {
// Hack since getItemPosition is never called.
final long itemId = getItemId(position);
String name = makeFragmentName(container.getId(), itemId);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if(fragment != null && getItemPosition(fragment) == POSITION_NONE) {
mFragmentManager.beginTransaction().remove(fragment).commit();
mFragmentManager.executePendingTransactions();
}
fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
JavaDoc 说:
public int getItemPosition(Object object)Called when the host view is attempting to determine if an item's positionhas changed. Returns POSITION_UNCHANGED if the position of the givenitem has not changed or POSITION_NONE if the item is no longer presentin the adapter.The default implementation assumes that items will neverchange position and always returns POSITION_UNCHANGED.@param object Object representing an item, previously returned by a call to instantiateItem(View, int).@return object's new position index from [0, getCount()), POSITION_UNCHANGED if the object's position has not changed, POSITION_NONE if the item is no longer present.
我已经在 API 级别 19 和 22 上测试了我的代码,问题是一样的。
提前致谢。
编辑:我扩展了 FragmentStatePagerAdapter
或 FragmentPagerAdapter
。如果我扩展 PagerAdapter
并编写自己的实例化和销毁方法,我也许可以解决这个问题。希望我不会有太多。另外,不理解它很烦人。 ;)
最佳答案
getItemPosition()
仅在 notifyDataSetChanged()
调用后调用。
因此,首先修改您的数据集,然后调用 notifyDataSetChanged()
。您还必须覆盖 getItemId()
以返回静态标识符。默认情况下,它返回给定的位置。
关于android - ViewPager getItemPosition() 从未调用过。谁应该调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599837/
Android 的 PagerAdapter 类中的方法 getItemPosition 的文档指出它是: Called when the host view is attempting to det
我对 Fragment[State]PagerAdapter 有点疑惑。基本上我的问题是我需要根据屏幕方向更改 ViewPager 的内容( fragment )。我阅读了很多关于此的帖子,有些人说我
在 android 开发者博客上我读到了这个: If you’re trying to replace Views in your ViewPager, it isn’t enough just to
我有一个屏幕,其中包含来自设计支持库的新 TabLayout。我还有一个用于显示 fragment 的 ViewPager。此 fragment 根据选择的选项卡显示不同的 View 列表。 应用程序
我认为 FragmentStatePagerAdapter 在重写 getItemPosition(Object object) 以重新排序页面时行为不正确。 下面是一个简单的例子。在初始状态下,页面
我是一名优秀的程序员,十分优秀!