橫向滑動的HorizontalListView滑動指定位置的解決方法


項目中用到了自定義橫向滑動的控件:HorizontalListView,點擊其中一項,跳轉到另外一個大圖界面,大圖界面也是HorizontalListView,想使用setSelection方法設定

項目中用到了自定義橫向滑動的控件:HorizontalListView,點擊其中一項,跳轉到另外一個大圖界面,大圖界面也是HorizontalListView,想使用setSelection方法設定到點擊的位置,卻發現這個開源的代碼沒有實現這個方法。解決方法如下:

1、HorizontalListView中重寫setSelection方法

@Override
public void setSelection(int position) {
int positionX = position * this.getWidth();
int maxWidth = this.getChildCount() * this.getWidth();
if (positionX <= 0) {
positionX = 0;
}
if (positionX > maxWidth) {
positionX = maxWidth;
}
scrollTo(positionX);
}

然后調用horizonListview.setSelection(position);方法設置顯示位置。

2、運行后發現問題沒有解決,this.getWidth()得到的值為0。有木有?這是因為界面還沒有加載完就調用了horizonListview.setSelection(position)方法,這時候設置是不起作用的。解決方法是延遲幾百毫秒再調用setSelection:

new Handler().postDelayed(new Runnable() {


public void run() {
vStepsHorizonListview.setSelection(position);
}
}, 350);

3、優化:延遲的方法效果不是很好,因為進入大圖界面后界面明顯卡頓一下再滑動到指定位置。而且這個毫秒數到底設置多少才合適也不得而知。所以將setSelection 方法在界面一加載完成后就調用是最合適的。所以重寫onWidowFocusChanged方法:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
vStepsHorizonListview.setSelection(position);
}
}

這樣問題就完美解決了,,希望能幫助到各位!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM