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函數時,您需要進行所有更改。