2012-06-16 30 views
1

我的麻煩是:當我得到新的數據時,我的viewpager使用我的自定義適配器不更新視圖。我發現很多程序員都有同樣的錯誤,所以我嘗試了很多建議,但沒有辦法爲我工作。很累。再一次,閱讀我的源文件,並幫助我理解爲什麼我無法更新查看pleaseee! 這裏是我的FragmentAdapter:Android:FragmentAdapter和pageview不更新視圖

private class SwipeyTabsPagerAdapter extends FragmentPagerAdapter implements 
     SwipeyTabsAdapter { 

    private final Context mContext; 
    private String[] datas; 

    public SwipeyTabsPagerAdapter(Context context, FragmentManager fm, String[] ds) { 
     super(fm); 
     this.mContext = context; 
     datas=ds; 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     Log.e("new item:", datas[position]); 
     return SwipeyTabFragment.newInstance(datas[position]); 
    } 

    @Override 
    public int getCount() { 
     return datas.length; 
    } 

    public TextView getTab(final int position, SwipeyTabs root) { 
     TextView view = (TextView) LayoutInflater.from(mContext).inflate(
       R.layout.swipey_tab_indicator, root, false); 
     view.setText(datas[position]); 
     view.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mViewPager.setCurrentItem(position); 
      } 
     }); 

     return view; 
    } 

} 

這裏是我設置適配器:

SwipeyTabsPagerAdapter adapter = new SwipeyTabsPagerAdapter(getApplicationContext(), getSupportFragmentManager(),dicts); 
      mViewPager.setAdapter(adapter); 
      mTabs.setAdapter(adapter); 
      mViewPager.getAdapter().notifyDataSetChanged(); 

通過logcat中,可以清楚地看到:只有第一次的newitem進行處理,所以視圖不能更新。

回答

0

也在您的mTabs上調用notifyDataSetChanged()。見這個方法的實施SwipeyTabsView類:

public void notifyDatasetChanged() { 
    if (mPager != null && mAdapter != null) { 
     initTabs(); 
     measure(mWidthMeasureSpec, mHeightMeasureSpec); 
     calculateNewPositions(true); 
    } 
} 
1

我也有這個問題,並嘗試了一切,我在互聯網上找到,並沒有奏效。

工作解決方案是使用FragmentStatePagerAdapter而不是FragmentPagerAdapter。 FragmentPagerAdapter似乎是「不可變的」(至少它的行爲如此)。

有關更多信息,請參見本主題:

Update ViewPager dynamically?

另一種可行的解決方案,但壞的是一切重新實例(ViewPager,適配器)每次編程方式刪除舊的和添加新的。

編輯

我忘記一些重要的事情在該適配器還必須添加這個方法:

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