Хранение данных в Swipeable UI. Получить контекст во фрагментах
Я использую вкладки Scrollable + Swipe Navigation для моего проекта. Я использовал Shared Preferences для хранения данных формы. Моя функция onClick для кнопки сохранения страницы.
public void onClick(View v) {
SharedPreferences.Editor editor3 = settings3.edit();
editor3.putString("address", personal_info_address.getText().toString());
editor3.putString("age", personal_info_age.getText().toString());
editor3.putString("name", personal_info_name.getText().toString());
editor3.putString("diseases", personal_info_diseases.getText().toString());
editor3.commit();
}
Я не могу восстановить данные после повторного открытия приложения. Я могу сохранить детали своей формы в обычном приложении с тем же кодом, нужно ли мне делать что-то еще, так как я использую вкладки "Прокрутка" + навигация смахивания.
РЕДАКТИРОВАТЬ:
Я реализовал clickListener в классе фрагментов, вот мой код:
public class SettingsFragment extends Fragment {
public static EditText txtMessage;
public static EditText emergencyno;
Button button;
Context context;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
context = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.services, container, false);
emergencyno = (EditText) root.findViewById(R.id.settings_number);
txtMessage = (EditText) root.findViewById(R.id.settings_msg);
button = (Button) root.findViewById(R.id.save);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = txtMessage.getText().toString();
String no = emergencyno.getText().toString();
Log.d("HELLO : ", "data1");
SharedPreferences sharedpreferences = context
.getSharedPreferences("MyData", Context.MODE_PRIVATE);
Log.d("HELLO : ", "data2" + context);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("message", msg);
editor.putString("number", no);
editor.commit();
Log.d("HELLO : ", "data3" + msg + no);
String message = sharedpreferences.getString("message",
"defValue");
String phone_no = sharedpreferences.getString("number",
"defValue");
txtMessage.setText(message);
emergencyno.setText(phone_no);
Log.d("HELLO : ", "data4" + message + phone_no);
}
});
return root;
}
}
Журнал дает правильные значения, которые мне нужны. Но при перезапуске приложения данные не сохраняются. Мне нужно знать, как получить контекст.
1 ответ
Я смог решить проблему. GetActivity() в этом фрагменте вернула главную страницу моего приложения, где я создал фрагменты, поэтому я определил свою функцию sharedpreferences на главной странице приложения (т.е. в активности этого фрагмента) следующим образом:
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static void putPref(String key, Boolean value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
public static boolean getPrefBool(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getBoolean(key, true);
}
И использовал функцию putPref при нажатии на кнопку и функцию getPref для созданной активности.