2012-10-12 45 views
6

在我的應用程序中,我有一個包含列表視圖的左窗格。在此列表視圖中進行選擇,然後調用相關數據,這些數據會更新右窗格以及活動中的其他鏈接和元素。由於這種設計,左側窗格必須始終進行選擇,以便爲活動的其餘部分提供有用的值。Android:將編程式單擊的列表視圖項目設置爲選定狀態

在我的活動的onCreate方法中,我調用以下命令來默認選擇列表中的第一個元素。 (programList是我的列表視圖)

programList.performItemClick(programList, 0, programList.getItemIdAtPosition(0); 

這一切的偉大工程和視圖負載與正確的價值觀預期,除了一兩件事。

我已經爲列表視圖添加了一個可繪製的選擇器,它突出顯示了所選元素。在模擬器中物理單擊時,它會突出顯示(我正在使用CHOICE_MODE_SINGLE),但在調用performItemClick()時不會突出顯示。我已經四處尋找幫助,並在點擊之前嘗試使用以下內容,但它沒有什麼區別。

programList.requestFocusFromTouch(); 
    programList.setSelection(0); 

從閱讀它聽起來就像是爲setSelection方法並不設置觸摸界面下的項目的狀態,並從我的結果似乎performItemClick方法沒有任何的API。我還試圖用

programList.getAdapter().getView(0, null, null).setSelected(true); 

然後我可以閱讀文本視圖狀態,看到它被選中,但也沒有做任何改變什麼是顯示在屏幕上。

onCreateMethod中是否存在阻止按鈕狀態被繪製得不同的東西?我試圖使個別文本視圖內的drawable無效,並使文本視圖本身無效,但這並沒有幫助。我也嘗試改變文本視圖的背景,但是看起來,我設置的選擇器控制着它,或者被繪製在前面。我知道我有正確的textView,因爲我用getText來讀取裏面的內容。

如果任何人能夠幫助我解決這個問題或指向我的解決方案,將不勝感激。

回答

4

訣竅是覆蓋適配器的getView()方法。試試這個:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final View renderer = super.getView(position, convertView, parent); 
    if (position == index_of_selected_item) { 
     renderer.setBackgroundResource(android.R.color.darker_gray); 
    } 
    return renderer; 
} 

當然,你可以設置背景顏色爲任何你喜歡的顏色來表明它是「活動」項目。

+0

謝謝。有沒有辦法通過使用listview.setSelector()方法來完成這項工作,還是必須使用getView()來設置我的狀態的其餘部分setSelector更方便,因爲它只是一個xml資源。我希望我知道當我在模擬器中用鼠標點擊時發生的不同情況,以及以編程方式調用click事件時發生的情況。 – ndw

+0

這不會讓我永遠取消選擇該項目,即使我將其他內容添加到您的聲明中,並設置爲其他顏色。獲取視圖只在視圖加載時才被初始調用。一旦設置了該列表視圖項目的背景,它就會保持這種狀態。 [this](http://stackoverflow.com/questions/10296846/android-listview-select-first-item-after-loading-datas)讓我最接近,但他的解釋並不完整。 – ndw

+2

如何獲取index_of_selected_item值 – Dimitri

相關問題