关注这个问题:
How to recreate all fragments in ViewPager:
我有这些课程:
public class ViewPagerAdapter extends FragmentPagerAdapter
{
private List<Fragment> fragments;
/**
* @param fm
* @param fragments
*/
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
和FragmentActivity
:
public class TabsViewPagerFragmentActivity extends FragmentActivity implements
ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener
{
static final String TAG = TabsViewPagerFragmentActivity.class.getSimpleName();
private TabHost mTabHost;
private ViewPager mViewPager;
private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, TabsViewPagerFragmentActivity.TabInfo>();
public ViewPagerAdapter mPagerAdapter;
.....
现在在这个FragmentActivity
我有这个听众:
private class SlicerSelectedOnClickListener implements OnClickListener
{
private ODSharedSlicer slicer;
private int slicerIndex;
public SlicerSelectedOnClickListener(ODSharedSlicer slicer, int slicerIntex)
{
super();
this.slicer = slicer;
this.slicerIndex = slicerIntex;
}
public void onClick(View v)
{
slicerOnClickConfiguration(slicerIndex, v);
mPagerAdapter.notifyDataSetChanged();
}
}
....
这很有用notifyDataSetChanged()
正在调用,ViewPager的片段正在按照我的意愿重新创建。
问题:当我尝试从另一个类调用适配器的notifyDataSetChanged()
方法时(在我的情况下,它是一个负责解析从服务器接收的数据的类)碎片保持不变。
我尝试这样做:我在FragmentActivity
课程中创建了这些方法(带ViewPager
的课程):
public void NotifyTabActivityViewPagerAdapter()
{
mPagerAdapter.notifyDataSetChanged();
}
public ViewPagerAdapter getTabActivityViewPagerAdapter()
{
return mPagerAdapter;
}
public ViewPager getTabActivityViewPager()
{
return mViewPager;
}
从第二节课中尝试了以下内容:
((TabsViewPagerFragmentActivity)currentActivity).NotifyTabActivityViewPagerAdapter();
或者:
((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPager().setAdapter(((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPagerAdapter());
但这不起作用。奇怪的是,当我这样做时:
((TabsViewPagerFragmentActivity)currentActivity).getTabActivityViewPager().setAdapter(null);
片段确实被删除了,但我无法使用从服务器端收到的新数据重新创建新的片段集。
我在这里缺少什么?我应该如何从另一个类重新创建此FragmentActivity
中的所有片段?
任何帮助都将不胜感激。
答案 0 :(得分:2)
我不认为是这种情况,我认为您应该确保NotifyTabActivityViewPagerAdapter
正在onPostExecute上运行,但我有一个项目
notifyDataSetChange
没有用,片段仍然是空的。
为了解决这个问题,我重写了适配器中的getItemPosition,如下所示:
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
返回POSITION_NONE
,确保适配器刷新其所有数据。
答案 1 :(得分:1)
那里真的有7个问题。但我理解更新或将数据发送到与其他类的FragmentActivity
相关联的ViewPager
的主要问题。我不知道其他类与FragmentActivity
或ViewPager
的关系,但我知道有两种方法可以按照您的方式处理更新或传输信息
(1)interface
如果您引用的类是另一个Fragment
,并且按照您在另一个ViewPager
或{更新数据(或调用方法)的方式加载Fragment
{1}}带有接口。您可以滚动到该链接的底部以获取一些示例代码,但基本上您可以在FragmentActivity
和包含Fragment
的活动(即片段的主机活动)之间创建一个桥梁。然后,您创建一个“侦听器”,在ViewPager
中查找某些更改,然后将一些信息传递给hoast活动。然后,主机活动会在您需要更新的第二个Fragment
内调用公共方法。这里唯一棘手的部分是记住在Fragment
的{{1}}方法中初始化您的界面“监听器”,否则它将无效。
(2)意图
如果您正在处理两个单独的活动,请使用Fragment
。将意图传递给您正在寻找的onAttach
并覆盖Intent
以在接收类中执行您想要的任何功能。
希望有所帮助 - 我需要更具体的回答,因为那里有很多子问题。