単純なlistpreferenceが機能していません。何か案は?
-
01-10-2019 - |
質問
誰かが私が間違っていることを教えてもらえますか?私は小さなものを1つだけ見逃していると思います。開発者サイトを見て、いくつかのチュートリアルを読んだことがありますが、自分が間違ったことを見ていません。
ListPreferenceを使用して、ボタンクリックで再生するサウンドを決定しようとしています。
私はこれを上に持っています:
public String greensound;
これが私のオンクリックコードです:
case R.id.green:
SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
greensound = prefs.getString("greensound", "gsone");
if (greensound == "gsone") {
mSoundManager.playSound(1);
} else if (greensound == "gstwo") {
mSoundManager.playSound(2);
} else if (greensound == "gsthree") {
mSoundManager.playSound(3);
}
break;
これが私のXMLです:
<ListPreference
android:title="Geen Button"
android:key="greensound"
android:summary="Select sound for the Green Button"
android:entries="@array/green_list"
android:entryValues="@array/green_list_values"
android:defaultValue="gsone">
</ListPreference>
これが私のsettings.javaです:
package com.my.app;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class Settings extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
そして、これが私の配列です。
//This is the one I want to display to the user
<string-array name="green_list">
<item>Sound One</item>
<item>Sound Two</item>
<item>Sound Three</item>
<item>Sound Four</item>
<item>Sound Five</item>
</string-array>
<string-array name="green_list_values">
<item>gsone</item>
<item>gstwo</item>
<item>gsthree</item>
<item>gsfour</item>
<item>gsfive</item>
</string-array>
編集:おそらく関連しているように見えるログキャットを追加しました。
08-27 01:52:07.738: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.748: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
08-27 01:52:07.758: WARN/Resources(6846): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f090000}
ddms> file explorer> data> data> packagename> sharedpreferencesこれはそこにありました:
com.my.app_preferences.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="redsound">rsone</string>
<string name="greensound">gsone</string>
</map>
_has_set_default_values.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="_has_set_default_values" value="true" />
</map>
これは本当に私をもっと混乱させます... greedsoundはインタクト= gsoneのように見えます。そして、はい、私はテストしました
mSoundManager.playSound(1);
mSoundManager.playSound(2);
mSoundManager.playSound(3);
他のコードなしですべてがうまく機能します。何が機能しているのかわかりません
解決
greensound.equals( "gsone")
他のヒント
同様の問題がありました。 "== '比較をString.content seadyals()に変更し、物事が機能し始めました。最終的に、キーと値をハッシュマップに入れました。
私が考えることができる唯一の問題は、プレイサウンドコードを実行する前にあなたの好みが設定されていないことです。設定がロードされていることを確認するには、oncreate()に次のコードを含めます。
/* Loading default preferences the first time application is run */
PreferenceManager.setDefaultValues(getApplicationContext(),
R.xml.filename, false);
また、ddms> file explorer> data> data>を確認してください> パッケージ名 >あなたの好みが設定されているという共有の参照。
優先アクティビティを使用し、XMLリソースから作成している場合。 sharedpreferenceファイルを自動的に作成します:packageName_preferences(例:com.my_company.my_app_preferences)。したがって、これにアクセスするには、次のコードを使用する必要があります。
SharedPreferences prefs = getSharedPreferences("com.my.app_preferences", MODE_PRIVATE);
最後に、XMLの次の行を削除します。
android:defaultValue="gsone"
お役に立てれば。