2014-03-27 66 views
7

在我的應用程序獲取視圖我有一個PreferenceScreen它看起來像這樣:從定製偏好

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <CheckBoxPreference 
      android:key="state" 
      android:title="@string/stateTitle" 
      android:summary="@string/stateSummary" 
      android:defaultValue="false" /> 

    <Preference 
      android:key="test" 
      android:layout="@layout/pref_control" 
      android:dependency="state" /> 
</PreferenceScreen> 

現在的問題是如何才能得到這是在我的pref_control.xml從PreferenceActivity的意見?我嘗試了正常的findViewById(),但以NullPointerException結束。這裏是我的代碼,導致異常:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 

    ((Button) findViewById(R.id.startTime)).setText("bla"); 
    ((Button) findViewById(R.id.endTime)).setText("bla"); 
} 

回答

0

由於您使用PreferenceActivity,你可以使用:

final CheckBoxPreference stateCheckBox = (CheckBoxPreference)findPreference("state"); 

想必:

final Preference testPreference = (Preference)findPreference("test"); 

它過時,但它應該工作。

+0

當然,我知道但我在測試偏好中使用自定義佈局。在這個佈局是一個按鈕,我想要得到這個按鈕,但是在'Preference'對象中,我沒有一個名爲'findViewById()'或其他的方法。 – Cilenco

+0

哦,我看到了,我想這是你使用findViewById的時候。我一直認爲,只要是在誇大了佈局後就應該沒問題。 –

+0

我認爲你應該發佈實際導致異常的代碼 –

3

您可以通過使用Preference p = findPrefences("test")從活動(或更好的PreferenceFragment,如果您使用的是更新版本的Android)獲得首選項。

在該對象上,您可以撥打.getView(convertView, parent)。出於您的目的,應該可以使用null作爲參數調用該方法:findPreferences("test").getView(null, null)

HTH