Как читать/записывать настройки из DialogFragment?

Я хочу прочитать из файла настроек в DialogFragment. Если я это сделаю:

prefs = getSharedPreferences("numberPicker.preferences", 0);

затем я получаю ошибку времени компиляции, потому что getsharedredreference-это метод ContextWrapper, но DialogFragment не является ContextWrapper (я использую android.поддержка.В4.приложение.DialogFragment для обратной совместимости, кстати).

Если альтернативно, как "обходной путь", я использую префы объекта SharedPreferences, созданные в классе InitSpel (который является FragmentActivity и, следовательно, является ContextWrapper) затем я получаю ошибки нет (ни при компиляции, ни на этапе выполнения), но значения не сохраняются (в следующий раз я запустить приложение значения baan1 и baan2 по-прежнему 0).

Как решить?

package mypackage;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;

public class VraagBanenDialogFragment extends DialogFragment {

    private View v;
    private EditText editText1; 
    private EditText editText2; 
    //private ArrayList<Baan> baanNummers;
    private int[] oldBanen;
    private int[] currentBanen;
    private SharedPreferences prefs;

    /*  public VraagBanenDialogFragment(ArrayList<Baan> baanNummers) {
        this.baanNummers = baanNummers;
    }
*/
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Restore preferences
        //prefs = InitSpel.prefs;
        prefs = getSharedPreferences("numberPicker.preferences", 0);
        int baan1 = prefs.getInt( "BAAN_01", 0 );
        int baan2 = prefs.getInt( "BAAN_02", 0 );
        //oldBanen = new int[InitSpel.aantalParallel];
        oldBanen = new int[2]; 
        oldBanen[0] = baan1;
        oldBanen[1] = baan2;

        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        v = inflater.inflate(R.layout.vraag_banen, null);
        // velden vullen met opgeslagen waarden
        editText1 = (EditText) v.findViewById(R.id.editText1); 
        editText2 = (EditText) v.findViewById(R.id.editText2); 
        editText1.setText(String.valueOf(baan1));
        editText2.setText(String.valueOf(baan2));
        //editText1.setText(String.valueOf(baanNummers.get(0).getBaanNummer()));
        //editText2.setText(String.valueOf(baanNummers.get(1).getBaanNummer()));
        builder.setView(v)
        // Add action buttons
        .setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {

               int baan1 = Integer.valueOf(editText1.getText().toString());
               int baan2 = Integer.valueOf(editText2.getText().toString());
               InitSpel.setBaanNummer(0, baan1);
               InitSpel.setBaanNummer(1, baan2);

               // en banen nog bij de preferences op schijf opslaan...
               // We need an Editor object (prefs.edit()) to make preference changes.
               // All objects are from android.context.Context
               prefs.edit().putInt("BAAN_01", baan1);
               prefs.edit().putInt("BAAN_02", baan2);

               // Commit the edits!
               prefs.edit().commit();
            }
        })
        .setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
               // TODO cancel;
            }
        });      
        return builder.create();
    }   
 }

1 ответов


использовать getActivity() С Activity выходит Context и Context есть getSharedPreferences() метод.

prefs = getActivity().getSharedPreferences("numberPicker.preferences", 0);

Я бы также рекомендовал сохранить ссылку на объект редактора, чтобы обеспечить правильное сохранение.

SharedPreferences.Editor editor = prefs.edit();
editor.putInt("BAAN_01", baan1);
editor.putInt("BAAN_02", baan2);

// Commit the edits!
editor.commit();

или цепочке:

prefs.edit()
  .putInt("BAAN_01", baan1)
  .putInt("BAAN_02", baan2)
  .commit();