2016-01-08 3 views
0

У меня есть метод в моей деятельности:Как передать onDateSet метод DialogFragment

// activity.class 
private void setDate(int year) { 
    view.setText(new StringBuilder().append(year)); 

} 

Мне нужно, чтобы это можно назвать, когда DatePickerDialog «s OnDateSetListener называется:

// DatePickerDialogFragment.class 
public class DatePickerDialogFragment extends DialogFragment { 
    private DatePickerDialog.OnDateSetListener l = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(int year) { 
      <activity>.setDate(year) 
     } 
    } 
} 

<activity> (или, тем не менее, я согласен сделать это) содержит ссылку на представление, которое необходимо установить. Как мне получить доступ к нему в DialogFragment?

Я пытался делать что-то вроде этого:

//activity.class 
DatePickerDialogFragment frag = new DatePickerDialogFragment(this); 

Но как я могу получить доступ к методу активности в файле DatePickerDialogFragment класса?

ответ

1

1) Создайте интерфейс и сделать деятельность его реализации:

interface DataSetter { 
void setDate(int year); 
} 

YourActivity extends Activity implements DataSetter { 

    public void setDate(int year) { 
     textView.setText(year+""); 
    } 
}   

2,1)

@Override 
     public void onDateSet(int year) { 
      Activity activity= getActivity(); 
      if (activity != null && activity instanceof DataSetter) {      
      (DataSetter)activity.setDate(year) 
     } 
    } 

2,2) или связывания активности на поле в onAttach и использовать его впоследствии.

+0

Не могли бы вы предоставить более полный пример? Я не понимаю, как этот подход позволяет мне вводить зависящий от представления метод из моей активности в класс-помощник. – dopatraman

+0

Какой шаг вы не понимаете? Активность показывает диалог, поэтому диалог будет содержать внутреннюю ссылку на активность (getActivity()). Внедряя некоторый интерфейс, можно вызвать вызов метода этой деятельности без «уродливого» кастинга для самой реализации самой операции. – aelimill

+0

Этот подход, я считаю, излишне подробен. Я попытался создать базовый класс 'DatePickerActivity', который имеет метод' setDate() ', а затем листинг текущего' getActivity() 'to DatePickerActivity', но это, я считаю, может вызвать проблемы с производительностью. Мысли? – dopatraman

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

  • Нет связанных вопросов^_^