1

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

<Preference 

...
 android:key="pref_custom"

 android:layout="@layout/preference_layout"

 >

在 onCreate 我自己的 PreferenceActivity 中,我想更改我的 CustomPreference ImageView。

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

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

我只能在OnPreferenceClickListener.onPreferenceClick我的 pref_custom Preference 方法中找到这个 ImageView。

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

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

在我的 PreferenceActivity onCreate 方法中,我阅读了我的偏好
Preference pref= findPreference("pref_phone_");

比我想在这个首选项的自定义布局中更改图像。

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

这里 imageViewSmallContact 返回 null。

然后在这个偏好中我注册 OnPreferenceClickListener

在 onPreferenceClick 里面 findViewById(R.id.ImageViewSmallContact); 返回正确的值。
我的问题是:

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

4

1 回答 1

0

为 PreferenceActivity 设置 xml 配置时,Preferences 的布局不会立即膨胀。仅在需要时才这样做。你可以尝试调试到

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

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

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

于 2013-01-16T12:33:05.513 回答