Как читать/записывать настройки из 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();