我得到了一个FragmentPagerAdapter。它的getItem
方法可以根据来自外部的数据返回一个片段。在我更新数据之后,它应该显示出来,然后调用notifyDataSetChanged
,但是什么也没有发生。我确实重写了getItemPosition
方法以返回POSITION_NONE
public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,
ViewPager.OnPageChangeListener
{
private final Context mContext;
private final TabHost mTabHost;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
private PagerTabsFragments fragmentDisplayInfo = null; // for now only a
// single size
// back
// stack
static class PagerTabsFragments
{
public int tabPosition;
public Fragment fragmentToDisplay;
public Object fragmentInfo;
public PagerTabsFragments(int tab, Fragment frag, Object info)
{
tabPosition = tab;
fragmentToDisplay = frag;
fragmentInfo = info;
}
}
public void SetFragmentToDisplay(int tabPosition, Fragment frag, Object info)
{
fragmentDisplayInfo = new PagerTabsFragments(tabPosition, frag, info);
notifyDataSetChanged();
}
public void CancelFragmentToDisplay()
{
fragmentDisplayInfo = null;
}
...
@Override
public Fragment getItem(final int position)
{
if ((fragmentDisplayInfo != null) && (fragmentDisplayInfo.tabPosition == position))
{
return fragmentDisplayInfo.fragmentToDisplay;
}
final TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
}
@Override
public int getItemPosition(Object item)
{
if (fragmentDisplayInfo == null)
{
return super.getItemPosition(item);
}
return POSITION_NONE;
}
...
来自外部的更新位于一个单击事件中,该事件设置了fragmentDisplayInfo
变量。我调试并看到fragmentDisplayInfo
确实被初始化了,getItemPosition
方法确实返回了POSITION_NONE
,但是getItem方法甚至没有被调用。为什么会这样呢?
编辑:
如果您还没有这样做,请注意适配器的overiden部分:
@Override
public int getItemPosition(Object item)
{
return POSITION_NONE;
}
发布于 2018-04-06 19:14:34
上面给出的解决方案对我都没有用。因此,希望下面的解决方案可能对你有帮助。
在我的代码中,viewPager中有两个片段。一个用于3个EditTexts和1个按钮,另一个片段具有RecyclerView。在单击按钮时,我的值将转到recyclerView,但它没有更新。现在,我使用了以下代码:
我调用了notifyDataSetChanged()的按钮单击。我的MainActivity有内部适配器类扩展FragmentStatePagerAdapter类。希望它能帮到别人。
https://stackoverflow.com/questions/30080045
复制相似问题