如何初始化我自己的Preference布局?

时间:2013-01-16 09:10:58

标签: android android-layout android-preferences

我已经使用imageView创建了自定义首选项布局。

<Preference 

...
 android:key="pref_custom"

 android:layout="@layout/preference_layout"

 >

在onCreate里面我自己的PreferenceActivity我想改变我的CustomPreference ImageView。

问题是下面的代码总是返回null。

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

我只能在我的pref_custom首选项OnPreferenceClickListener.onPreferenceClick方法中找到此ImageView。

在我的类ConfigureActivity(扩展PreferenceActivity)inCreate方法我只有“:

...
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

在onPreference中查找findViewById(R.id.ImageViewSmallContact);返回正确的值 我的问题是:

如何初始化此布局以从我的PreferenceActivity获取imageView?

1 个答案:

答案 0 :(得分:0)

在为PreferenceActivity设置xml配置时,首选项的布局不会立即膨胀。只有在需要时才会这样做。您可以尝试调试

android.preference.Preference.onBindView/onCreateView(..)

看,当这个被调用时。我认为它类似于ListView中的视图膨胀,只有当它们实际显示时才会完成。 你想对你的ImageView做什么?也许你可以在layout.xml文件中指定它吗?

可以覆盖Preference并提供onBindView()的自定义实现,它可以执行ImageView所需的任何操作。 我只能在这里推测,因为当我想要更复杂的布局时,我抛弃了整个PreferenceActivity,但我认为你可以创建一个Preference的子类,然后在你的xml中引用它。在该类(例如MyImagePreference)中,您将覆盖onBindView方法以根据需要初始化视图(在super.onBindView()调用之后)。