1

在这里,我解释我的问题。我安装了ViewPager和FragmentPagerAdapter,以便您可以在两页之间滑动。 每个片段包含数据(TextView)。 使用作为参数传递的数据创建我的ViewPager时,一切顺利。 但是,如果我想改变的数据(即片段的内容),它不会刷新Android的fragmentpageradapter更新数据

public class MaPagerAdapter extends FragmentPagerAdapter { 

    private Meteo[]lameteo; 


    public MaPagerAdapter(FragmentManager fm, Meteo[]lameteo) { 
      super(fm); 
      this.lameteo = lameteo; 
      Log.i("aa", "ville maPagerAdapter"+lameteo[0].getLoc()); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch(position) { 
     case 0: return page_droite.newInstance(lameteo[0]); 
     case 1: return page_gauche.newInstance(lameteo); 
     } 
     return null; 
    } 
    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

    public void setData(Meteo[] meteo){ 
     this.lameteo=meteo; 
    } 
    @Override 
    public int getCount() { 
      return 2; 
    } 

}

而我的主要

if(mPagerAdapter!=null){ //if pagerAdapter already initialized 
     mPagerAdapter.setData(meteo); 
     mPagerAdapter.notifyDataSetChanged(); 
     }else 
     mPagerAdapter = new MaPagerAdapter(getSupportFragmentManager(), meteo); 
     ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
     pager.setAdapter(mPagerAdapter); 

你能帮助我吗?

回答

0

不,该寻呼机适配器不能这样工作。 Android没有意识到你的碎片中有特定的数据,所以它不知道如何更新它。

您必须在您的setData调用中获取您的片段的引用,然后您必须在片段中编写新的方法,您可以调用它们来重置其数据。在片段内部,您必须确保使用新数据更新片段的视图。至于你们适配器,可以做这样的事情:

public class MaPagerAdapter extends FragmentPagerAdapter { 

    private Meteo[]lameteo; 
    private FragmentManager fm; 

    public MaPagerAdapter(FragmentManager fm, Meteo[]lameteo) { 
     super(fm); 
     this.fm = fm; 
     this.lameteo = lameteo; 
     Log.i("aa", "ville maPagerAdapter"+lameteo[0].getLoc()); 
    } 

    public void setData(Meteo[] meteo){ 
     this.lameteo=meteo; 

     page_droite droite = (page_droite) getFragment(0); 
     droite.setData(meteo[0]); 
     page_gauche gauche = (page_gauche) getFragment(1); 
     gauche.setData(meteo); 
    } 

    private Fragment getFragment(int position) { 
     String tag = "android:switcher:" + R.id.viewpager + ":" + getItemId(position); 
     return fm.findFragmentByTag(tag); 
    } 

注意,没有必要调用notifyDataSetChanged在这种情况下,你仍然在你的适配器相同的片段。当您在片段中实现setData函数时,您需要进行所有更改。