DatePickerDialog.OnDateSetListener () и MVP

Я запутался ... Я пытаюсь изучить шаблон MVP, и у меня проблема с реализацией этого в этом коде:

mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            month = month + 1;
            Log.d(TAG, "onDataSet: dd/mm/yyyy: " + year + "/" + month + "/" + dayOfMonth);
            String date = dayOfMonth + "/" + month + "/" + year;
            dateText.setText(date);
        }
    };

а также:

@OnClick(R.id.date_text)
public void onClickDate() {
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dialog = new DatePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_MinWidth, mDateSetListener,
            year, month, day);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}

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

2
0
421
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пойду следующим образом:

Определите интерфейс для View (Activity)

public interface MyView {
    public void setDateText (String date);
    public void displayDatePickerDialog(int year, int month, int day);
}

Тогда Presenter будет выглядеть так:

public class MyPresenter {
    MyView view;

    public MyPresenter (MyView view){
        this.view = view;
    }

    public void onDateSet(int year, int month, int dayOfMonth){
        month = month + 1;
        String date = dayOfMonth + "/" + month + "/" + year;
        view.setDateText(date);
    }

    public void onDateClicked (){
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        view.displayDatePickerDialog(year, month, day);
    }

И ваша активность должна выглядеть примерно так:

public class MainActivity extends AppCompatActivity implements MyView{
    MyPresenter myPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        myPresenter = new MyPresenter(this);
    }

    @OnClick(R.id.date_text)
    public void onClickDate() {
        myPresenter.onDateClicked();
    }

    mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            myPresenter.onDateSet(year, month, dayOfMonth);
        }
    };

    @Override
    public void setDateText (String date){
         dateText.setText(date);
    }

    @Override
    public void displayDatePickerDialog(int year, int month, int day){
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_MinWidth, mDateSetListener,
        year, month, day);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.show();
    }
}

Пожалуйста!

sebasira 15.09.2018 16:28

Другие вопросы по теме