我在尝试设置Google Play商店的偏好设置时获得空指针。以下代码显示了Facebook和Google Play商店的偏好设置代码。 Facebook代码运行良好。如果我为播放商店首选项取出2行java代码,它会正确显示(但当然不会做任何事情)。在stackoverflow上,我看到4个问题,询问从findPreference()返回的空值。其中3个未得到答复。 :(。有什么想法吗?
LiveWallpaperSettings.java - OnCreate()
final Preference facebookPreference = (Preference) findPreference("Facebook");
facebookPreference.setOnPreferenceClickListener(this);
final Preference googlePlayStorePreference = (Preference) findPreference("More from developer"); // assigned null
googlePlayStorePreference.setOnPreferenceClickListener(this);
LiveWallpaperSettings.xml
<PreferenceCategory android:title="@string/livewallpaper_settings" >
<Preference
android:icon="@drawable/facebook"
android:key="@string/preferenceKeyFacebook"
android:summary="@string/facebook"
android:title="@string/facebook" />
<Preference
android:icon="@drawable/google_play_store"
android:key="@string/preferenceKeyGooglePlay"
android:summary="@string/dev_name"
android:title="@string/morefromdeveloper" />
</PreferenceCategory>
我看到一个建议使用holo的页面,但是没有编译。我认为因为项目的构建目标是4.0.3
<PreferenceCategory android:title="@string/livewallpaper_settings" >
<Preference
android:icon="@drawable/facebook"
android:key="@string/preferenceKeyFacebook"
android:summary="@string/facebook"
android:title="@string/facebook" />
<Preference
android:icon="@drawable/google_play_store"
holo:key="@string/preferenceKeyGooglePlay"
holo:summary="@string/dev_name"
holo:title="@string/morefromdeveloper" />
</PreferenceCategory>
的strings.xml
<string name="preferenceKeyFacebook">facebook</string>
<string name="preferenceKeyGooglePlay">googleplay</string>
我有一个必然的问题。在处理首选项单击的方法(下面)中,我将arg0.getKey()与“facebook”进行比较,因为getKey()返回一个字符串。我无法比较R.string.preferenceKeyFacebook,因为它是一个int。这有效,但我想知道是否有更好的方式,风格,这样做。也许将arg0转换为int,或将R.string.preferenceKeyFacebook转换为字符串。
public boolean onPreferenceClick(Preference arg0) {
if (arg0.getKey().equals("facebook")) {
答案是将“facebook”替换为:
getResources().getString(R.string.preferenceKeyFacebook)
答案 0 :(得分:2)
您要按标题而不是按键询问偏好,这应该可以解决您的问题:
final Preference facebookPreference = (Preference) findPreference("facebook");
facebookPreference.setOnPreferenceClickListener(this);
final Preference googlePlayStorePreference = (Preference) findPreference("googleplay");
googlePlayStorePreference.setOnPreferenceClickListener(this);
答案 1 :(得分:1)
正确的代码应该是:
final Preference facebookPreference = findPreference(getString(R.string.preferenceKeyFacebook));
final Preference googlePlayStorePreference = findPreference(getString(R.string.preferenceKeyGooglePlay));