-1

PreferenceScreenAndroid アプリでいくつかのユーザー設定を設定するために使用しています。ListPreferenceいくつかのアイテムで完全に機能しますが、適切に機能しCheckboxPreferenceません。RingtonePreference適切な着信音ダイアログが表示され、選択できますが、選択内容は保存されません。

何を選択しても、私のアプリはデフォルトのサウンドしか再生しません。着信音ダイアログを再度開くと(選択した直後、またはアプリを終了して戻った後)、常にデフォルトの項目が選択されています。設定値を表示するフィールドがあり、設定画面で変更した後でも、常にデフォルトのサウンドが選択されていることが示されます。また、DDMS で監視したときに、デバイス (/data/data/myapp/shared_prefs 内) の適切な xml ファイルが変更されていないことも確認しました。他の項目 ( などCheckboxPreference) を変更すると、shared_prefs ファイルがリアルタイムで変更されます。私は自分PreferenceScreenを最小限に抑えましたが、それでも同じように動作します。キー名、デフォルトを変更し、携帯電話のアプリ データを消去しようとしましたが、うまくいきません。

SO に既に投稿されている 2 つの同様の質問 (ここここ) を見つけましたが、それらは数か月前のもので、回答がないか、質問をした人があきらめて別の方法を試しました。設計どおりに動作しないように見える理由を解明したいと思います..または、少なくとも、同じことを行うための適切な方法を見つけてください。

私のコードの関連部分は以下のとおりです..事前に感謝します!

/res/xml/preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
  <RingtonePreference
    android:key="alertSound"
    android:ringtoneType="notification"
    android:summary="Select audio notification sound"
    android:title="Alert Sound" >
  </RingtonePreference>
</PreferenceScreen>

/src/myapp/EditPrefsActivity.java:

public class EditPrefsActivity extends PreferenceActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    settings = PreferenceManager.getDefaultSharedPreferences(this);
    addPreferencesFromResource(R.xml.preferences);
  }
}
4

1 に答える 1

1

私はちょうど解決策を見つけました!回答は最近、同様の質問に投稿されました: https://stackoverflow.com/a/15887357/1992342

android:launchMode="singleInstance"マニフェストの EditPrefsActivity<activity>エントリから削除すると、問題が解決します。どうやらそれは [ほとんど知られていない] Android のバグです。

于 2013-06-12T00:17:39.523 に答える