1

PreferenceFragment (actionBar の一部) をロードするメイン アクティビティがあります。

PreferenceFragment 内で、XML ファイルから設定を読み込みます。

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);

    }

問題は、タブを変更した場合 (ActionBar によって管理されていることを思い出してください)、別のフラグメントの設定の 1 つを変更し、preferenceFragment に戻って更新されないことです。特に問題は、さまざまなフラグメントから、さらにはリモート呼び出しによっても変更できる SwitchPreference(true/false) です (その後、共有設定で設定が変更されます。はい、変更をコミットしました)。

さまざまな解決策を探しましたが、正直なところ、うまくいくものは見つかりませんでした。私自身の考えは次のとおりです。

スイッチの Switch 要素を取得できれば問題は解決するので、 onStart() または onResume() メソッドでスイッチを true に設定できます。しかし、Switch オブジェクトを取得するための変更はありますか? 通常のレイアウトをロードすると、次のようにスイッチにアクセスできます。

    View v = inflater.inflate(R.layout.start_fragment, container, false);
    Switch status = (Switch) v.findViewById(R.id.switch1);

その後、次のようにスイッチの位置を設定できます。

status.setChecked(true);

別の解決策は、実際のビューを破棄して addPreferencesFromResource() を再度呼び出すことですが、正直なところ、これを行う方法がわかりません....

3 番目の解決策は、PreferenceFragment で OnCheckedChangeListener を使用することですが、やはり問題はスイッチを変更/更新する方法です。

サービスの 1 つで OnSharedPreferenceChangeListener を実行していて、この問題をデバッグするために、リスナーに switchPreference のステータスを記録させたので、Preference が正しく更新されていると確信しています。

どうにかして助けてくれませんか?


残念ながら、明日の朝までに自分の質問に答えることができないので、質問を編集します。

ありがとうございます。基になるアクティビティを再開したくはありませんが、フラグメントのみを再開します。

幸いなことに、このスレッドで手がかりを見つけました: How do you refresh the PreferenceActivity to show changes in settings?

本当に簡単に SwitchPreference にアクセスできます。私の解決策は次のとおりです。

private SwitchPreference pref_phone_locked;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);

        status = (SwitchPreference) findPreference("status");

    }


    public void onStart(){
            super.onStart();


            SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
            if(sharedPref.getBoolean("status", false)){
                status.setChecked(true);
            }else{
                status.setChecked(false);
            }
        }

このようにして、Preference を SwitchPreference にキャストし、onStart() 呼び出しのたびに変更するだけです。これが私の問題に対する最良の解決策だと思います。

うまくいけば、この答えが将来誰かの時間を節約するでしょう =) ありがとうございました!

4

1 に答える 1

0

これがうまくいくかどうかはわかりませんが(私はAndroidの非常に基本的な知識を持っています)、同様の質問でこの解決策を見つけましたが、私にとっては非常にうまく機能します

private void simulateRefresh(){
    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);
    startActivity(intent);
}

基本的に、これはアニメーションを介さずにアクティビティを破棄して再作成します。

ここで見つかりました

于 2014-02-18T16:54:29.150 に答える