項目中用到了自定義橫向滑動的控件: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);
}
}
這樣問題就完美解決了,,希望能幫助到各位!