0

尝试为 Google Play 商店设置首选项时,我得到一个空指针。下面的代码显示了 Facebook 和 Google Play 商店的偏好代码。Facebook 代码运行良好。如果我为 play store 首选项取出 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);

动态壁纸设置.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>

字符串.xml

<string name="preferenceKeyFacebook">facebook</string> 
<string name="preferenceKeyGooglePlay">googleplay</string>

我有一个必然的问题。在处理首选项点击的方法中(如下),我将 arg0.getKey() 与“facebook”进行比较,因为 getKey() 返回一个字符串。我无法比较 R.string.preferenceKeyFacebook 因为它是一个整数。这行得通,但我想知道是否有更好的方法,在风格上,做到这一点。也许将 arg0 转换为 int,或将 R.string.preferenceKeyFacebook 转换为字符串。

public boolean onPreferenceClick(Preference arg0) {
    if (arg0.getKey().equals("facebook")) {

答案是将“facebook”替换为:

getResources().getString(R.string.preferenceKeyFacebook)
4

2 回答 2

2

您要求按标题而不是键进行首选项,这应该可以解决您的问题:

final Preference facebookPreference = (Preference) findPreference("facebook");
facebookPreference.setOnPreferenceClickListener(this);

final Preference googlePlayStorePreference = (Preference) findPreference("googleplay");
googlePlayStorePreference.setOnPreferenceClickListener(this);
于 2013-08-24T20:44:05.520 回答
1

正确的代码应该是:

final Preference facebookPreference = findPreference(getString(R.string.preferenceKeyFacebook));
final Preference googlePlayStorePreference = findPreference(getString(R.string.preferenceKeyGooglePlay)); 
于 2013-08-24T21:14:33.257 回答