2015-05-17 6 views
-2

В моей деятельности у меня есть TextView, и я хочу установить текст из статического вложенного DialogFragment. Вот мой кодДоступ к переменной из Activity внутри статического вложенного фрагмента

public static class DatePickerFragment extends DialogFragment 
     implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // Do something with the date chosen by the user 
    } 
} 

ответ

0
public static MainActivity instance; 

public MainActivity() { 
    instance = this; 
} 


public void setText(final String text){ 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      textView.setText(text) 
     } 
    }); 
} 

Используйте его как этого

MainActivity.instance.setText("1234"); 

Но я советую вам держаться подальше от статических экземпляров, и использовать слушатель (обратный вызов), а!

0

Вам не нужны никакие статические переменные или любая вещь, которая может вызвать утечку памяти. Вы можете реализовать слушателя в действии и назначить его при прикреплении фрагмента. Это документированный способ взаимодействия фрагментов с его деятельностью и другими фрагментами.

public static class DatePickerFragment extends DialogFragment { 
    private DatePickerDialog.OnDateSetListener mCallback; 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (DatePickerDialog.OnDateSetListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement DatePickerDialog.OnDateSetListener"); 
     } 
    } 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), mCallback, year, month, day); 
    } 
} 
0

Решение моей проблемы :: я просто добавил статический модификатор перед тем переменной TextView внутри деятельности.

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