2013-01-16 84 views
0

我用imageView創建了我的自定義首選項佈局。如何初始化我自己的首選項佈局?

<Preference 

... 
android:key="pref_custom" 

android:layout="@layout/preference_layout" 

> 

在我自己的PreferenceActivity裏面onCreate我想改變我的CustomPreference ImageView。

問題是下面的代碼總是返回null。

imageViewSmallContact = (ImageView) findViewById(R.id.ImageViewSmallContact); 

我只能內部OnPreferenceClickListener.onPreferenceClick方法我pref_custom偏好找到這個ImageView的。

在我的課ConfigureActivity(擴展PreferenceActivity)在onCreate方法我只有 「:

... 
super.onCreate(savedInstanceState); 
addPreferencesFromResource(R.xml.preferences); 
updatePreferenceView(); // here I update all my preferences ` 
... 

在我PreferenceActivity onCreate方法我讀我的偏好
偏好PREF = findPreference(」 pref_phone_「);

比我想改變形象在這一偏好我的自定義佈局。

imageViewSmallContact = (ImageView) findViewById(R.id.ImageViewSmallContact); 

此處imageViewSmallContact返回null。

然後,在此偏好我寄存器OnPreferenceClickListener

內部onPreferenceClick findViewById(R.id.ImageViewSmallContact);返回正確的值。
我的問題是:

如何初始化此佈局以從我的PreferenceActivity獲取imageView?

+0

你能爲你的活動添加一些代碼嗎?我懷疑你正在嘗試在調用setContentView之前訪問視圖。 – koljaTM

+0

我已更新說明。 我認爲PreferenceActivity中的setcontentview設置活動不是我的自定義首選項 –

+0

你檢查了http://stackoverflow.com/questions/7846855/android-how-to-set-custom-layout-for-preferenceactivity-in-android-3 -0? – koljaTM

回答

0

設置PreferenceActivity的xml配置時,首選項的佈局不會立即膨脹。只有在需要時纔會這樣做。你可以嘗試調試到

​​

看到,當這個被調用。我認爲它與ListView中的視圖膨脹類似,只有在實際顯示時纔會這樣做。 你想對你的ImageView做什麼?也許你可以在你的layout.xml文件中指定它?

重寫Preference並提供一個自定義的onBindView()實現,可以爲ImageView執行任何必要的操作。 我只能在這裏進行推測,因爲當我想要更復雜的佈局時,我放棄了整個PreferenceActivity,但是我認爲您可以創建一個Preference的子類,然後在您的xml中引用它。在該類中(例如MyImagePreference),您將覆蓋onBindView方法以根據需要初始化您的視圖(在super.onBindView()調用之後)。

+0

我需要改變基於SharedPreference的imageView。 對不起,愚蠢的問題,我怎麼克服我的ImageView在我的onBindView方法?我試過findViewById(R.id.myimageview), 但內部ID有沒有我的imageView鍵 –

+0

對不起。 這是eclipse錯誤。 一切工作正常。 非常感謝... –