0

Google Play ストアの設定をしようとすると、null ポインターが表示されます。以下のコードは、Facebook と Google Play ストアの設定コードを示しています。Facebook コードは問題なく動作します。Play ストア設定の 2 行の Java コードを削除すると、正しく表示されます (ただし、もちろん何もしません)。stackoverflow では、findPreference() から返された null について 4 つの質問が表示されます。そのうち 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>

ホロの使用を提案するページを見ましたが、コンパイルされません。プロジェクトのビルドターゲットが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>

当然のことながら質問があります。設定のクリックを処理するメソッド (以下) では、getKey() が文字列を返すため、arg0.getKey() を「facebook」と比較します。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)
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 に答える