2015-01-21 3 views
-1

Итак, я пытаюсь сохранить сообщение, которое, как мне кажется, должно сохраняться в общих настройках, чтобы впоследствии его редактировать и делиться им с другими фрагментами. У меня есть фрагмент с кнопкой, которая открывает диалог, который включает в себя поле редактирования, и я хочу сохранить все, что записано в поле редактирования, в виде строки, которая может быть использована позже в другом действии. Проблема в том, что я не могу вернуть сообщение после его установки, поэтому я вообще не могу редактировать сообщение.Общие предпочтения между фрагментом и диалогом

Это нажатие кнопки, которая устанавливает диалог поставить в настройках, в том числе радио-группы и редактировать текстовое поле:

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; 
    } 
} 

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

+0

где ваш logcat? опубликуйте его. –

+0

записать значение prefs в settings_my_health_alert_settings? –

+0

Пожалуйста, напишите еще какой-нибудь код вашего фрагмента, в котором вы получаете ценность из ваших предпочтений. – GrIsHu

ответ

0

После добавления сообщения в ваш SharedPreference вы должны его зафиксировать. Попробуйте сделать это как показано ниже в вашей деятельности:

 SharedPreferences prefs = getActivity().getSharedPreferences("my_health_settings", Activity.MODE_PRIVATE); 
     SharedPreferences.Editor mEditor = prefs.edit(); 
     mEditor.putString("message", msg); 
     mEditor.commit(); 
+0

Да, я пробовал это, но он, похоже, не работает или не меняет проблему. Я также снова отредактировал этот вопрос. – Kozbot

+0

Вы пытались отладить свой код? – GrIsHu

Смежные вопросы