2012-09-09 158 views
0
private void setListviewSelection(final ListView list, final int pos) { 
    list.post(new Runnable() { 
     @Override 
     public void run() { 

      list.setSelection(pos); 

      for (int i = 0; i < list.getChildCount(); i++) { 
        View v = list.getChildAt(i); 

        if (i == pos && v != null) 
         v.setBackgroundColor(Color.argb(200, 51, 181, 229)); 
        else if (v != null) 
         v.setBackgroundColor(Color.BLACK); 
      } 
     } 
    }); 
} 

這裏是我用來模擬我的音樂播放器中的選擇的代碼。這個想法是,當用戶按Next或Previous按鈕時,一個元素在ListView中突出顯示,但這不符合我的要求,因爲setSelection不能順利滾動,基本上某些元素沒有正確突出顯示。爲了更好地解釋,我實際上試圖實現的是一個Winamp應用程序,當您按下一個/上一個按鈕(查看播放列表時)時,該應用程序具有這種滾動方式。Android ListView滾動到位置

使用setSelectionFromTop(),smoothScrollToPosition()也沒有正確地工作。

回答

0

您只能從主線程更新Views。將您的代碼移動到主線程。

+0

不幸的是,這並沒有爲我的案件工作,突出仍然「跳」從一個元素到另一個。 – tvoloshyn

+0

看起來像** v **正在返回null,即使它實際上可以在列表中看到。 – tvoloshyn

+0

是否有使用線程的原因?您無法從主線程外部更新用戶界面 –