5

ListPreference があり、デフォルト値があり、うまく機能します。また、すべての共有設定をリセットする設定もあり、うまく機能します。問題は、ListPreference に戻ると、まだ古い値が表示されていることです。設定を完全に終了して戻ると、正しく表示されます。

問題は、ListPreference に正しい値を強制的に使用させるにはどうすればよいかということです。他のすべての設定は問題なく機能しているようです。

回避策を見つけましたが、私には汚れているように見えるので満足できません。ユーザーがリセットをクリックすると、値がリセットされた後、自分で値を既に設定されている値に設定します。

( (ListPreference) findPreference( myListKey ) ).setValue( String.valueOf( DEFAULT_VALUE ) );

前もって感謝します。

4

5 に答える 5

1

遅いことはわかっていますが、これに出くわした他の誰かが役に立つかもしれません。

Preference reset = (Preference) findPreference("reset");
reset.setOnPreferenceClickListener(new OnPreferenceClickListener() {

    public boolean onPreferenceClick(Preference preference) {
    // TODO Auto-generated method stub
    preference.getEditor().clear().commit();
        Toast.makeText(getBaseContext(),
                "Restored to default settings", Toast.LENGTH_SHORT)
                .show();
        return false;
        }
    });
于 2012-10-28T10:37:43.517 に答える
1
ListPreference pref = (ListPreference) findPreference ("yeeha");

pref.setValue(null);
于 2014-06-24T14:20:45.660 に答える
0

ListPreferenceでカテゴリのリストを設定するのと同様の問題がありました。問題は、 setEntriesメソッドによるリストを使用して、ダイアログで表示されるオプションを変更できないことです(クリック リスナーでエントリを設定するのは遅すぎます)。

私にとっての解決策は、無効にする必要があるときに PreferenceFragment に通知するDrawerListenerを追加することでした。

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager().
            findFragmentById(R.id.fragment_drawer);

mDrawerOptions = new DrawerLayout.SimpleDrawerListener() {
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
        fragment.onOpened();
    }
};

mDrawerLayout.addDrawerListener(mDrawerOptions);

別の解決策は、ダイアログが準備される前にエントリを設定するonPrepareDialogBu​​ilderメソッドを上書きすることです。

class CustomListPreference extends ListPreference {
    @Override
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
        // TODO setEntries
        super.onPrepareDialogBuilder(builder);
    }
}
于 2016-03-28T20:13:25.033 に答える
0

ListPreference の onSetInitialValue メソッドをオーバーライドする必要があると思います。このような。

public class CustomListPreference extends ListPreference{

protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {

//すでに初期化されている場合、またはオプション値が初期化されていない場合 if(restoreValue){

}else{ //デフォルト値に設定

}

}

}

于 2011-02-13T12:53:05.090 に答える