【问题标题】:ViewPager in fragment Class is not working properly片段类中的 ViewPager 无法正常工作
【发布时间】:2014-03-28 10:48:03
【问题描述】:

我在 Fragment 类中使用 ViewPager。ViewPager 在每个页面中有三个页面,显示自定义列表视图。ViewPager 有时会正确显示列表视图,有时会显示空白页。

带有 ViewPager 的片段类

public class Schedule extends Fragment{

RelativeLayout schedule_lay;
Schedule_fragment_adapter sfadp;
ViewPager pager;
TitlePageIndicator tpi;
PagerTabStrip pts;

@Override
public View onCreateView(LayoutInflater inflater,final ViewGroup container, Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    schedule_lay = (RelativeLayout) inflater.inflate(R.layout.schedule, container, false);
    pager = (ViewPager) schedule_lay.findViewById(R.id.viewpager);
    pts = (PagerTabStrip)schedule_lay.findViewById(R.id.page_title_indicator);
    pts.setDrawFullUnderline(false);

    pts.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);
    pts.setTabIndicatorColor(Color.parseColor("#ff3824"));

    initialisePaging();

    return schedule_lay;
}

private void initialisePaging() {

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(getActivity(), Ongoing.class.getName()));
    fragments.add(Fragment.instantiate(getActivity(), Upcoming.class.getName()));
    fragments.add(Fragment.instantiate(getActivity(), Recent.class.getName()));
    this.sfadp  = new Schedule_fragment_adapter(super.getActivity().getSupportFragmentManager(), fragments);

    pager.setAdapter(this.sfadp);
}
}

FragmentPagerAdapter

public class Schedule_fragment_adapter extends FragmentPagerAdapter {

private final List<Fragment> fragments;

/**
 * @param fm
 * @param fragments
 */
public Schedule_fragment_adapter(FragmentManager fm,
        List<Fragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override
public Fragment getItem(int position) {
    return this.fragments.get(position);
}

@Override
public int getCount() {
    return this.fragments.size();
}

@Override
public CharSequence getPageTitle(int position) {
    switch (position) {
    case 0:
        return "Ongoing";
    case 1:
        return "Upcoming";
    case 2:
        return "Recent";
    }
    return null;
}
}

自定义列表视图类(我的所有三个自定义列表类如下所示)

 public class Ongoing extends Fragment{

RelativeLayout ongoing_lay;
ListView ongoing_matches_lv;
ArrayList<Item> ongoing_matches = new ArrayList<Item>();

@Override
public View onCreateView(LayoutInflater inflater,final ViewGroup container, Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    ongoing_lay = (RelativeLayout) inflater.inflate(R.layout.ongoing, container, false);


    return ongoing_lay;
}
}

我无法找到我的问题。任何人都可以帮助我解决这个问题。

【问题讨论】:

  • 您尝试过使用列表片段吗?
  • 我从最后一个片段返回时遇到了类似的问题,第一个片段将在重新加载时运行。我正在从数据库中提取数据并填充到列表视图中。
  • @playmaker420 你得到这个问题的解决方案了吗
  • 是的。因为我的要求做到了。可能会有解决办法
  • @playmaker420 看到 Luksprog 正确回答它的工作。

标签: android android-fragments android-viewpager android-fragmentactivity android-nested-fragment


【解决方案1】:

在行中实例化适配器时使用getChildFragmentManager() 而不是super.getActivity().getSupportFragmentManager()

this.sfadp  = new Schedule_fragment_adapter(super.getActivity().getSupportFragmentManager(), fragments);

【讨论】:

  • 谢谢。它工作正常。我还有一个疑问。当我刷这个视图寻呼机时。它有点慢。我该如何改进它。
  • @Yugesh 要么改进您的布局(以减少视图和浅层视图层次结构),要么检查您是否没有在ViewPager 中使用的片段中进行任何繁重的初始化。从您发布的代码中没有明显的迹象表明存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
相关资源
最近更新 更多