2010-06-08 50 views
10

我已經瞭解到,使用android:entriesListView時,它使用android.R.layout.simple_list_item_1的佈局列表項和android.R.id.text1作爲佈局內的TextView的ID。請糾正我,如果我錯了。使用android.R.layout.simple_list_item_1用輕主題

知道了這一點,我想創建自己的適配器,但使用相同的佈局資源,以提供與平臺的UI一致性。因此,我試過如下:

mAdapter = new SimpleCursorAdapter(
    getApplicationContext(), 
    android.R.layout.simple_list_item_1, 
    mSites, 
    new String[] { SitesDatabase.KEY_SITE }, 
    new int[] { android.R.id.text1 } 
); 

不幸的是,因爲我用的是光的主題(我有android:theme="@android:style/Theme.Light"在我<application>),列表項出現白字,使它們無法讀取。

但是,當使用android:entries指定項目的靜態列表時,項目顯示正確,文本顏色爲黑色。

我在做什麼錯?我如何使我的動態適配器使用標準佈局,但使用輕型主題?

回答

15

請糾正我,如果我錯了。

您至少不是一個錯誤。它使用com.android.internal.R.layout.simple_list_item_1。雖然這與android.R.layout.simple_list_item_1幾乎相同,但它可能有不同的主題。

此外,從來沒有使用getApplicationContext()。只需使用您的Activity作爲Context。看看是否有幫助。

+2

確實,使用'this'而不是'getApplicationContext()'修復了它。哇!謝謝! – Felix 2010-06-08 22:07:17

+3

@Felix:是的,'getApplicationContext()'是一個嚴重混亂的方法。它給了你一個'Application'對象,它是一個'Context',但顯然不適合任何與'Context'有關的GUI相關的東西。除非實際需要'Application'對象(例如,您有一個自定義對象),否則我絕不會使用'getApplicationContext()'。畢竟,這種方法是一種方法......在「上下文」上。所以,按照定義,你已經有了一個非常愉快的'Context'。我很高興這工作! – CommonsWare 2010-06-08 23:01:15

+0

我總是覺得'getApplicationContext()'在某種程度上更加正確*(如果它們改變了上下文的工作方式,並且'this'不再是'Context',那麼getApplicationContext()'可能會被更新以反映API和我的變化不必重構我的代碼)。謝謝你清理:) – Felix 2010-06-09 11:45:22