FragmentPagerAdapter notifyDataSetChanged无法正常工作 [英] FragmentPagerAdapter notifyDataSetChanged not working
问题描述
我有一个FragmentPagerAdapter.它的getItem
方法可以根据其从外部获得的数据返回一个片段.更新数据后,假设要显示的数据我调用了notifyDataSetChanged
,但是什么也没有发生.我DID覆盖了getItemPosition
方法以返回POSITION_NONE
:
I got a FragmentPagerAdapter. It's getItem
method can return a fragment according to data it has from the outside. After I update the data its suppose to display I call notifyDataSetChanged
and yet nothing happened. I DID override the getItemPosition
method to return 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方法.为什么会这样?
And the update from outside is in a click event which sets the fragmentDisplayInfo
var.
I debuged and saw that the fragmentDisplayInfo
is indeed initialized and the getItemPosition
method does return POSITION_NONE
, but the getItem method is not even called. Why is that?
如果您还没有这样做,请注意适配器的覆盖部分:
If you hadn't done so as well, please notice that overiden part of the adapter:
@Override
public int getItemPosition(Object item)
{
return POSITION_NONE;
}
推荐答案
对此我不确定,但是您可以尝试使用FragmentStatePagerAdapter
而不是FragmentPagerAdapter
.问题是,我也遇到了这个问题,这对我有帮助
I'm not sure about this, but you can try to use FragmentStatePagerAdapter
instead of FragmentPagerAdapter
. The thing is, i've also run into this issue, and it helped me
这篇关于FragmentPagerAdapter notifyDataSetChanged无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!