Как правильно разделить код MVVM в моем случае? - PullRequest
0 голосов
/ 08 октября 2018

Я только начал изучать MVVM, и у меня возникли проблемы с некоторым кодом.Как правильно отделить этот вид кода между View и ViewModel?

У меня также есть вопрос об отличиях Presenter от MVP и ViewModel от MVVM.Основное различие между этими двумя классами - это общение или есть что-то большее?Вроде бы тоже самое, но я в замешательстве.

public class TaskFragment extends Fragment {

private static final String TAG = "TaskFragment";

@Nullable
@BindView(R.id.floating_button) FloatingActionButton floatingButton;
@BindView(R.id.date_text) TextView dateText;
@BindView(R.id.time_text) TextView timeText;
@BindView(R.id.title_text) TextView titleText;
@BindView(R.id.save_button) Button saveButton;

private DatePickerDialog.OnDateSetListener mDateSetListener;
private TimePickerDialog.OnTimeSetListener mTimeSetListener;

Realm realm;
RealmHelper realmHelper;

String mText, mDate, mTime;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.task_fragment, container, false);

    ButterKnife.bind(this, view);
    ((MainActivity) getActivity()).hideFloatingActionButton();


    realmHelper = new RealmHelper(realm);
    Realm.init(getActivity());
    RealmConfiguration configuration = new RealmConfiguration
            .Builder()
            .deleteRealmIfMigrationNeeded()
            .build();
    realm = Realm.getInstance(configuration);

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

    mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Log.d(TAG, "onTimeSet: hh/mm: " + hourOfDay + "/" + minute);
            String time = hourOfDay + ":" + minute;
            timeText.setText(time);
        }
    };

    return view;

}


@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();
}


@OnClick(R.id.time_text)
public void onClickTime() {
    Calendar calendar = Calendar.getInstance();
    int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);

    TimePickerDialog dialog = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_MinWidth, mTimeSetListener,
            hourOfDay, minute, DateFormat.is24HourFormat(getActivity()));
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}


@OnClick(R.id.save_button)
public void onClickSave() {
    mText = titleText.getText().toString();
    mDate = dateText.getText().toString();
    mTime = timeText.getText().toString();

    Task task = new Task();
    task.setText(mText);
    task.setDate(mDate);
    task.setTime(mTime);

    Log.d(TAG, "ON_CLICK_SAVE" + " / " + mText + " / " + mDate + " / " + mTime + " / " + getId());

    realmHelper = new RealmHelper(realm);
    realmHelper.saveTask(task);


    if(!mText.isEmpty() && !mDate.isEmpty() && !mTime.isEmpty()) {

        Toast.makeText(getActivity(), "Task added", Toast.LENGTH_LONG).show();
    }
    else {
        Toast.makeText(getActivity(), "Fields are empty", Toast.LENGTH_LONG).show();
    }

    titleText.setText("");
    dateText.setText("");
    timeText.setText("");
}


@Override
public void onDestroyView() {
    realm.close();
    super.onDestroyView();
}

}

1 Ответ

0 голосов
/ 09 октября 2018

Это похоже на классный вид.Я не знаю, что такое RealmConfiguration, поэтому, возможно, его можно переместить в ViewModel.В основном ViewModel отвечает за все интерфейсы для доступа к логике / бизнес-потоку в Model.View только реагирует на изменение ViewModel.Здесь вы можете передать ваши данные из textViews в ViewModel через ViewModelProviders.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...