Android сохранить состояние для диалога - PullRequest
2 голосов
/ 12 мая 2011

Как сохранить состояние диалога в Android? У меня есть следующий диалог с переключателями, но я не могу понять, как сохранить состояние диалога. Спасибо за любую помощь

final CharSequence[] items = {"Item 1", "Item 2", "Item 3"};
AlertDialog.Builder builder = new AlertDialog.Builder(Tweaks.this);
builder.setTitle("Pick an item");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
}).show();

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Вы должны сохранить положение выбранного элемента, когда пользователь нажимает.Затем вы просматриваете ранее сохраненный индекс при отображении списка.Если ранее сохраненного значения нет, вы возвращаете -1. ​​

У меня есть приложение, вспомогательный класс Preferences ...

public class AppPreferences {
     private static final String APP_SHARED_PREFS = "myApp_preferences"; //  Name of the file -.xml
     private SharedPreferences appSharedPrefs;
     private Editor prefsEditor;

     public AppPreferences(Context context)
     {
         this.appSharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS, Activity.MODE_PRIVATE);
         this.prefsEditor = appSharedPrefs.edit();
     }

     public int getItemIndex() {
         return appSharedPrefs.getInt("itemIndex", -1);
     }

     public void saveItemIndex(int i) {
         prefsEditor.putInt("itemIndex", i);
         prefsEditor.commit();
     }
}

Затем в моем коде я создаю переменную поля ...

protected AppPreferences appPrefs;

И создать его экземпляр внутри Activity onCreate () ...

appPrefs = new AppPreferences(getApplicationContext());

Затем заменить "-1" на ...

builder.setSingleChoiceItems(items, appPrefs.getItemIndex(), new DialogInterface.OnClickListener() {

И в вашем onClick () убедитесь, что вы ...

appPrefs.saveItemIndex(item);
0 голосов
/ 05 марта 2015

Я сохранил состояние в переменных-членах в DialogFragment.Следующий код сохраняет состояние при закрытии диалога, но не при закрытии приложения.

public class MyDialogFragment extends DialogFragment {

    //this is the default value, set when the dialog is created
    private String myValue = "any initial String"; 
    private TextEdit myTextEdit;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        //construct the dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        ViewGroup myView = (ViewGroup)inflater.inflate(R.layout.my_view, null);
        builder.setView(myView);

        //find the view and set the value
        myTextEdit = (TextView)myView.findViewById(R.id.my_text_edit);
        myTextEdit.setText(myValue);

        return builder.create();
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);

        //when the dialog is dismissed, save the users input and overwrite the initial value
        myValue = myTextEdit.getText();

    }
}
...