我已经使用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?
答案 0 :(得分:0)
在为PreferenceActivity设置xml配置时,首选项的布局不会立即膨胀。只有在需要时才会这样做。您可以尝试调试
android.preference.Preference.onBindView/onCreateView(..)
看,当这个被调用时。我认为它类似于ListView中的视图膨胀,只有当它们实际显示时才会完成。 你想对你的ImageView做什么?也许你可以在layout.xml文件中指定它吗?
可以覆盖Preference并提供onBindView()的自定义实现,它可以执行ImageView所需的任何操作。 我只能在这里推测,因为当我想要更复杂的布局时,我抛弃了整个PreferenceActivity,但我认为你可以创建一个Preference的子类,然后在你的xml中引用它。在该类(例如MyImagePreference)中,您将覆盖onBindView方法以根据需要初始化视图(在super.onBindView()调用之后)。