Итак, я пытаюсь сохранить сообщение, которое, как мне кажется, должно сохраняться в общих настройках, чтобы впоследствии его редактировать и делиться им с другими фрагментами. У меня есть фрагмент с кнопкой, которая открывает диалог, который включает в себя поле редактирования, и я хочу сохранить все, что записано в поле редактирования, в виде строки, которая может быть использована позже в другом действии. Проблема в том, что я не могу вернуть сообщение после его установки, поэтому я вообще не могу редактировать сообщение.Общие предпочтения между фрагментом и диалогом
Это нажатие кнопки, которая устанавливает диалог поставить в настройках, в том числе радио-группы и редактировать текстовое поле:
case R.id.settings_my_health_alert_settings:
//Set Up Dialog
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.myhealth_alert_settings);
dialog.setCancelable(false);
dialog.setTitle(R.string.health_alert_dialogue_title);
// set the custom dialog components - text, image and button
RadioButton1 = (RadioButton)dialog.findViewById(R.id.intervalOnce);
RadioButton2 = (RadioButton)dialog.findViewById(R.id.interval5min);
RadioButton3 = (RadioButton)dialog.findViewById(R.id.interval10min);
radioGroup = (RadioGroup) dialog.findViewById(R.id.radioGroup);
Button dialogButton = (Button) dialog.findViewById(R.id.ok_btn);
Button cancelButton = (Button) dialog.findViewById(R.id.cancel);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(RadioButton1.isChecked()) {
AlertService.isOnce = true;
}
if(RadioButton2.isChecked()){
AlertService.isOnce = false;
intervalTime = 5;
}
if(RadioButton3.isChecked()){
AlertService.isOnce = false;
intervalTime = 10;
}
SharedPreferences.Editor mEditor = prefs.edit();
mEditor.putString("message", msg);
mEditor.apply();
dialog.dismiss();
}
});
Это является частью OnCreateView, которая, кажется, как место для поместите его, если я хочу, чтобы строка из общих настроек отображалась, когда диалог открывается каждый раз. Но я все равно получаю нулевой указатель.
SharedPreferences prefs = getActivity().getSharedPreferences("my_health_settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor mEditor = prefs.edit();
mEditor.putString("message", msg);
mEditor.commit();
String edt = prefs.getString("message", "");
if (edt == null) {
editT = "Emergency at: " +MyHealthFragment.address;
editTextBox.setText(editT);
} else {
editTextBox.setText(edt);
}
Помните, что строка в общих предпочтениях должна быть доступна и для другого фрагмента.
Я не могу найти оптимальную логику для этого - поместите его в onCreateView? или onClick? или что-то совершенно другое, что мне не хватает, а затем, если в поле редактирования ничего не задано, у вас есть стандартное резервное сообщение ... любая помощь будет отличной. Надеюсь, это имеет смысл.
Заранее спасибо.
EDIT: Это Logcat, что я получаю:
Caused by: java.lang.NullPointerException
at com.nesscorporation.android.sibext.fragment.settings.dropdown.MyHealthSettingsFragment.<init>(MyHealthSettingsFragment.java:58)
at com.nesscorporation.android.sibext.fragment.settings.dropdown.MyHealthSettingsFragment.getInstance(MyHealthSettingsFragment.java:41)
Я на самом деле не имеют настройки предупреждений фрагмент, только XML для диалога.
Вот ЦЕЛЫЙ фрагмент (с некоторыми вещами, которые я пробуя):
public class MyHealthSettingsFragment extends BaseSettingsFragment implements View.OnClickListener {
public static MyHealthSettingsFragment getInstance(){
return new MyHealthSettingsFragment();
}
private static final String TAG = "Koz";
private View pillRemindTitle;
private View contactsTitle;
private View alertSettings;
public static String message = "";
public static int intervalTime = 5;
public RadioButton RadioButton1;
public RadioButton RadioButton2;
public RadioButton RadioButton3;
private RadioGroup radioGroup;
private EditText editTextBox;
private String editT;
private String msg;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = View.inflate(getActivity(), R.layout.settings_my_health_fragment, null);
pillRemindTitle = v.findViewById(R.id.settings_my_health_pills_rem);
contactsTitle = v.findViewById(R.id.settings_my_health_contact_title);
alertSettings = v.findViewById(R.id.settings_my_health_alert_settings);
editTextBox = (EditText) v.findViewById(R.id.edit_message);
pillRemindTitle.setOnClickListener(this);
contactsTitle.setOnClickListener(this);
alertSettings.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.settings_my_health_pills_rem:
startActivity(new Intent(getActivity(), PillRemindersActivity.class));
break;
case R.id.settings_my_health_contact_title:
startActivity(new Intent(getActivity(), ContactsActivity.class));
break;
case R.id.settings_my_health_alert_settings:
//Set Up Dialog
final Dialog dialog = new Dialog(getActivity());
//final String msg = message.getText().toString();
dialog.setContentView(R.layout.myhealth_alert_settings);
dialog.setCancelable(false);
dialog.setTitle(R.string.health_alert_dialogue_title);
((TextView)dialog.findViewById(android.R.id.title)).setTypeface(Typeface.createFromAsset(getActivity().getAssets(),"walkway_expand_bold.ttf"));
// set the custom dialog components - text, image and button
RadioButton1 = (RadioButton)dialog.findViewById(R.id.intervalOnce);
RadioButton2 = (RadioButton)dialog.findViewById(R.id.interval5min);
RadioButton3 = (RadioButton)dialog.findViewById(R.id.interval10min);
radioGroup = (RadioGroup) dialog.findViewById(R.id.radioGroup);
Button dialogButton = (Button) dialog.findViewById(R.id.ok_btn);
Button cancelButton = (Button) dialog.findViewById(R.id.cancel);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(RadioButton1.isChecked()) {
AlertService.isOnce = true;
}
if(RadioButton2.isChecked()){
AlertService.isOnce = false;
intervalTime = 5;
}
if(RadioButton3.isChecked()){
AlertService.isOnce = false;
intervalTime = 10;
}
SharedPreferences prefs = getActivity().getSharedPreferences("my_health_settings", Activity.MODE_PRIVATE);
SharedPreferences.Editor mEditor = prefs.edit();
mEditor.putString("message", msg);
mEditor.commit();
String edt = prefs.getString("message", "");
//Log.d(TAG, edt);
if (edt == null) {
//editT = "Emergency at: " +MyHealthFragment.address;
//editTextBox.setText(editT);
Log.d(TAG, "null");
} else {
Log.d(TAG, edt);
//editTextBox.setText(edt);
}
dialog.dismiss();
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
//SMS or MMS: radio group sms or mms (with image of map)
break;
}
}
Я пытаюсь получить какой-либо текст, написанный в диалоговое окно редактирования вперед каждый раз, когда в диалоговом окне редактирования чтобы он мог быть отредактирован в соответствии с пожеланиями пользователей.
где ваш logcat? опубликуйте его. –
записать значение prefs в settings_my_health_alert_settings? –
Пожалуйста, напишите еще какой-нибудь код вашего фрагмента, в котором вы получаете ценность из ваших предпочтений. – GrIsHu