1

在这个问题之后:

如何在 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从另一个类中重新创建所有片段?

任何援助将不胜感激。

4

2 回答 2

2

我不认为是这种情况,我认为你应该确保它NotifyTabActivityViewPagerAdapter在 onPostExecute 运行,但是我有一个项目 notifyDataSetChange没有工作并且片段仍然是空的。为了解决这个问题,我重写了适配器中的 getItemPosition,如下所示:

 @Override
 public int getItemPosition(Object object) {
  return POSITION_NONE;
 }

通过返回POSITION_NONE,您可以确保适配器刷新其所有数据。

于 2013-06-02T14:01:37.270 回答
1

里面真的有7个问题。但我理解主要问题是更新或发送数据到FragmentActivityViewPager来自其他类的关联。我不知道其他类与FragmentActivityor的关系,ViewPager但我知道有两种方法可以按照您想要的方式处理更新或传输信息

(1) 一个接口

如果您所指的类是另一个类Fragment,并且加载ViewPager方式与您在另一个类中更新数据(或调用方法)的方式相同,Fragment或者FragmentActivity使用接口。您可以滚动到该链接的底部以获取一些示例代码,但基本上您在Fragment和包含 的活动ViewPager(即片段的主机活动)之间创建了一座桥梁。然后,您创建一个“侦听器”来查找 中的某些更改Fragment,然后它将一些信息传递给 hoast 活动。然后,宿主活动会在Fragment您需要更新的一秒内调用公共方法。Fragment这里唯一棘手的部分是记住在你的方法中初始化你的接口“监听器”,onAttach否则它将不起作用。

(2) 意图

如果您要处理两个单独的活动,只需使用Intent. 将意图传递给FragmentActivity您正在寻找并覆盖onNewIntent(Intent i)以在接收类中执行您想要的任何功能。

希望有帮助 - 我需要更具体的回答,因为那里有很多子问题。

于 2013-05-28T14:45:39.967 回答