簡體   English   中英

OnPageChangeListener使ViewPager落后

[英]OnPageChangeListener makes ViewPager laggy

我有一個問題,僅當我使用OnPageChangeListener的onPageSelected方法時,ViewPager才在某些設備上滯后。

這是監聽器:

public class SelectorChangeListener implements ViewPager.OnPageChangeListener {

    @Override
    public void onPageScrolled(int i, float v, int i2) {}

    @Override
    public void onPageScrollStateChanged(int i) {}

    @Override
    public void onPageSelected(int i) {
        onLineSelected(mAdapter.getLinePalina(i));
    }
}

這是onLineSelected方法:

/**
 * Called when a line becomes selected
 * @param linePalina LinePalina Object
 */
public void onLineSelected(LinePalina linePalina) {
    if(D) Log.d(TAG, "Called: onLineSelected([linePalina])");
    Palina palina = linePalina.palina;
    Line line = linePalina.line;
    mHeaderText.setText(palina.getName());
}

在適配器內部,這是getLinePalina(int)方法:

public LinesSelectorFragment.LinePalina getLinePalina(int position) {
    return mLines.get(position);
}

mLines是LinePalina對象的簡單ArrayList。

當我禁用OnPageChangeListener時,這種滯后消失的原因可能是什么?

編輯 :我試圖從OnPageChangeListener刪除任何行,所以現在它是空的,它被像這樣添加到ViewPager中:

pager.setOnPageChangeListener(new SelectorChangeListener());

並且* 即使偵聽器為 ,但某些設備上的ViewPager還是比較落后(Galaxy Tab 2 7.0),而如果我注釋掉該行:

//pager.setOnPageChangeListener(new SelectorChangeListener());

的viewpager工作完美! 這怎么可能?

那真是個奇怪的錯誤。 我在使用Android 4.2.1的通用移動發現設備上遇到了完全相同的情況。 它可以在其他設備(例如三星Galaxy S3,Nexus 5等)上完美運行。

然后,在調試時,我看到onPageScrolled被調用了很多次。 實際上,如果用戶將手指保持在屏幕上並保持滑動而沒有將手指從屏幕上移開,則被稱為無限次。 我在onPageScrolled方法中更改了TextView的文本,由於該方法被調用了很多次,所以導致了非常緩慢的行為。 我設法解決了這樣的問題:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    int lastScrolledPagePosition = 0;
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if(position != lastScrolledPagePosition) {
            txtImageCount.setText(position + 1 + "/" + imageUrls.size());
            lastScrolledPagePosition = position;
        }
    }

    @Override
    public void onPageSelected(int position) {}

    @Override
    public void onPageScrollStateChanged(int state) {}
});

希望這可以幫助遇到相同問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM