【问题标题】:Use one fragment many times in viewpager在 viewpager 中多次使用一个片段
【发布时间】:2013-05-20 10:41:47
【问题描述】:

我正在尝试在 viewpager 中多次使用一个片段,我正在尝试使用 ViewPager 构建一个动态更新的 UI。我想使用相同的设计,基本上是相同的片段,每个页面都有不同的数据,但我不知道该怎么做。有什么建议吗? 这可能是Adapter、FragmentActivity和fragment

public MonPagerAdapter(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();
}
@SuppressWarnings("deprecation")
@Override
public Object instantiateItem(View pager, int position) 
{
    //CalendrierMens cm = new CalendrierMens();
    CalendrierMens cm = new CalendrierMens();
    cm.date_actuelle.set(cm.date_actuelle.get(Calendar.MONTH), 1);
    cm.updateTable(cm.date_actuelle.get(Calendar.YEAR), cm.date_actuelle.get(Calendar.MONTH), cm.date_actuelle.get(Calendar.DAY_OF_MONTH));
    ((ViewPager)pager).addView(CalendrierMens.newInstance().getView());
    return super.instantiateItem(pager, position);
}

    super.onActivityCreated(savedInstanceState);
    mois_annee = (TextView)getActivity().findViewById(R.id.mois_annee);
    mois_annee.setText(getMonthForInt(date_actuelle.get(Calendar.MONTH)+1)+"  "+date_actuelle.get(Calendar.YEAR));
    this.creerGrille();
    this.updateTable(date_actuelle.get(Calendar.YEAR), date_actuelle.get(Calendar.MONTH), date_actuelle.get(Calendar.DAY_OF_MONTH));
}
public static CalendrierMens newInstance()
{
    CalendrierMens fragment = new CalendrierMens();
    //Bundle args = new Bundle();
    //args.put
    //fragment.setArguments(args);
    return fragment;
}

super.onCreate(savedInstanceState); super.setContentView(R.layout.viewpager);

    // Création de la liste des Fragments que fera défiler le PagerAdapter
    List<Fragment>fragments = new Vector<Fragment>();

    // Ajout des Fragments dans la liste
    fragments.add(Fragment.instantiate(this,CalendrierMens.class.getName()));
    //fragments.add(Fragment.instantiate(this,PageMilieuFragment.class.getName()));
    //fragments.add(Fragment.instantiate(this,PageDroiteFragment.class.getName()));

    // Création de l'adapter qui s'occupera de l'affichage de la liste des Fragments
    this.monPagerAdapter = new MonPagerAdapter(super.getSupportFragmentManager(), fragments);

    ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
    // Affectation de l'adapter au ViewPager
    pager.setAdapter(this.monPagerAdapter);

【问题讨论】:

  • 我创建了一个包含我的月历代码的片段,一个管理我的 Viewpageradapter 的 fragmentActivity,以及一个继承 FragmentPagerAdapter 的适配器
  • 这是我的适配器的代码:public Object instantiateItem(View pager, int position) { //CalendrierMens cm = new CalendrierMens(); CalendrierMens cm = new CalendrierMens(); cm.date_actuelle.set(cm.date_actuelle.get(Calendar.MONTH), 1); cm.updateTable(cm.date_actuelle.get(Calendar.YEAR), cm.date_actuelle.get(Calendar.MONTH), cm.date_actuelle.get(Calendar.DAY_OF_MONTH)); ((ViewPager)pager).addView(CalendrierMens.newInstance().getView());返回 super.instantiateItem(pager, position); }
  • 编辑您的问题并发布相关的代码片段

标签: android


【解决方案1】:

使用FragmentStatePagerAdapter

private class MyPagerAdapter extends FragmentStatePagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title = "";   
        return title;
    }

    @Override
    public Fragment getItem(int arg0) {

         CalendrierMens cm = new CalendrierMens();
         Bundle bundle = new Budle();
         switch(arg0) {
         case 0:
          // set args for case 0
           break;
         }
        cm.setArguments(bundle);
        return cm;
    }


}

【讨论】:

  • 不幸的是这并没有改变任何东西,我希望当我向右或向左滑动时当前月份发生变化,也许我更改日期的代码有问题
  • instantiateItem 是强制方法吗?那内容是对的吗?我不需要实现监听器吗?
  • 如果你扩展 FragmentStatePagerAdapter 它不是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多