2012-12-05 61 views
4

現在我有一個ViewPagerViewPagerIndicator在Android上分頁我的屏幕。ViewPagerIndicator與1000頁不平滑

我從FragmentStatePagerAdapter覆蓋getCount()並返回1000以擁有1000個頁面。我需要做一些代碼來獲取日曆上的頁面標題庫(dd/MM/yyyy)。任何時候我滾動,我看到所有1000頁面標題重建(我打印日誌在適配器#getPageTitle(int))。

這使我的傳呼機滾動非常緩慢,不再平滑。

我認爲ViewPagerIndicator在我滾動1頁時不應該重建所有的頁面標題。

UPDATE:添加適配器的源代碼

public class ResultAdapter extends FragmentStatePagerAdapter { 
    public ResultAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return 1000; 
    } 


    @Override 
    public Fragment getItem(int position) { 
     Log.d("xskt", "Adapter.GetItem.position=" + position); 
     Calendar calendar = Utilities.selectedProvince.getLastDay(Utilities.selectedCalendar, Utilities.pagerSize - position - 1); 
     ResultView resultView = new ResultView(Utilities.selectedProvince, calendar); 
     resultView.setTitle(calendar.get(Calendar.DAY_OF_MONTH) + "/" + (calendar.get(Calendar.MONTH) + 1)); 
     return resultView; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Calendar calendar; 

       //DO SOME CALCULATE WITH CALENDAR 

     // String title = calendar.get(Calendar.DAY_OF_MONTH) + "/" + (calendar.get(Calendar.MONTH) + 1); 
     // return title; 
     Log.d("xskt","get page title"); 
     return ((ResultView) getItem(position)).getTitle(); 
    } 

} 
+0

您添加的代碼用於生成從哪個頁面標題調用? (調試並查看堆棧跟蹤或從哪裏調用該函數?) – Matthieu

+2

您還應該發佈適配器代碼。 – dmon

+0

我已經更新了上面的源代碼。我嘗試將標題設置爲fragment,然後調用getTitle()來檢索它,但沒有任何更改。 –

回答

1

我需要同樣的事情,這裏是我所做的代碼,基本上我計算標題基於新片段的位置顯示。

默認情況下,會顯示當天對應的片段,如果位置發生變化,我只是得到當前位置和新位置之間的差異並修改日期以相應地顯示。

public class RateFragmentPagerAdapter extends FragmentStatePagerAdapter{ 

private final int todayPosition; 
private RateFragment currentFragment; 
private final Calendar todayDate; 

/** Constructor of the class */ 
public RateFragmentPagerAdapter(FragmentManager fm, int today_position, Calendar today_date) { 
    super(fm); 
    todayPosition = today_position; 
    todayDate = (Calendar) today_date.clone(); 
} 

/** This method will be invoked when a page is requested to create */ 
@Override 
public Fragment getItem(int arg0) {  
    currentFragment = new RateFragment(); 
    Bundle data = new Bundle(); 

    data.putInt("current_page", arg0); 
    currentFragment.setArguments(data); 
    return currentFragment; 
} 

/** Returns the number of pages */ 
@Override 
public int getCount() {  
    return RateDayApplication.numberOfDays; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    Calendar newDate = (Calendar) todayDate.clone(); 

    int diffDays = position - todayPosition; 
    newDate.add(Calendar.DATE, diffDays); 

    return RateDayApplication.dateTitleFormat.format(newDate.getTime()); 
} 

}

這是快的,因爲我從來沒有叫片段對象,我只是比較當前的位置(最終)和功能的新的。

+0

謝謝。我會在稍後測試。 –

+0

@Yoann Hercouet我想知道RateDayApplication中的內容,或者我如何在getPageTitle返回日期 – arraystack

+0

我更改了我的代碼,但我使用此類在整個應用程序中保留了一些常量變量。 getPageTitle是特定於我的需求,這取決於你的想法。 –