如果没有@Provides注释的方法,则无法提供SaveContract.Presenter

时间:2019-12-06 21:07:56

标签: android dagger-2 android-mvp

我正在尝试根据Google示例使用Dagger 2学习MVP,但是我仍然遇到相同的错误:

  

SaveContract.Presenter不能在没有   @提供注释的方法

当我向SaveFragment注入SaveContract.Presenter时,出现相同的错误。没有@Inject Presenter时为null。

SaveFragment:

public class SaveFragment extends DaggerDialogFragment implements SaveContract.View {

private FloatingActionButton saveButton;
private EditText textEditTest;
private TextView dateEditText, timeEditText;
private DatePickerDialog.OnDateSetListener dateSetListener;
private TimePickerDialog.OnTimeSetListener timeSetListener;

@Inject
SaveContract.Presenter savePresenter;

@Inject
public SaveFragment() {
}

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

    saveButton = view.findViewById(R.id.save_button);
    textEditTest = view.findViewById(R.id.text_edit_text);
    dateEditText = view.findViewById(R.id.date_text_view);
    timeEditText = view.findViewById(R.id.time_text_view);

    saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (textEditTest.getText().toString().trim().isEmpty()) {
                Toast.makeText(getContext(), "Write something", Toast.LENGTH_SHORT).show();
            }
            else {
                String text = textEditTest.getText().toString();
                String date = dateEditText.getText().toString();
                String time = timeEditText.getText().toString();
                //savePresenter.addTaskClick(text, date, time);
            }
        }
    });

    dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            month = month + 1;
            String date = dayOfMonth + "/" + month + "/" + year;
            dateEditText.setText(date);
        }
    };

    timeSetListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            String time = hourOfDay + ":" + minute;
            timeEditText.setText(time);
        }
    };

    dateEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDatePicker();
        }
    });

    timeEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showTimePicker();
        }
    });

    return view;
}

@Override
public void onResume() {
    super.onResume();
    Window window = Objects.requireNonNull(getActivity()).getWindow();
    assert window != null;
    window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}

public void showDatePicker() {
    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(Objects.requireNonNull(getActivity()), android.R.style.Theme_Holo_Light_Dialog_MinWidth, dateSetListener,
            year, month, day);
    Objects.requireNonNull(dialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}

public void showTimePicker() {
    Calendar calendar = Calendar.getInstance();
    int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
    int minute = calendar.get(Calendar.MINUTE);

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

@Override
public void addTaskSuccess() {
    Toast.makeText(getContext(), "Task Added!", Toast.LENGTH_SHORT).show();
}

@Override
public void addTaskError() {
    Toast.makeText(getContext(), "Something went wrong!", Toast.LENGTH_SHORT).show();
}

@Override
public void onStart() {

    super.onStart();
}

@Override
public void onAttach(@NonNull Context context) {
    savePresenter.takeView(this);
    super.onAttach(context);
}


}

SaveModule:

@Module
public abstract class SaveModule {

@FragmentScope
@Binds
abstract SaveContract.Presenter savePresenter(SavePresenter savePresenter);

}

SavePresenter:

public final class SavePresenter implements SaveContract.Presenter, RealmService.OnTransactionCallback, BasePresenter<SaveContract.View> {

@Inject
public SavePresenter() {
}

@Override
public void setView(Object view) {

}

@Override
public void addTaskClick(String text, String date, String time) {
   // realmService.addTask(text, date, time, this);
}

@Override
public void onRealmSuccess() {

}

@Override
public void onRealmError(Throwable error) {
    error.printStackTrace();
}

@Override
public void takeView(SaveContract.View view) {

}

@Override
public void dropView() {

}
}

SaveContract:

public interface SaveContract {

interface View extends BaseView<Presenter> {
    void addTaskSuccess();
    void addTaskError();

}

interface Presenter extends BasePresenter<View> {
    void setView(Object view);
    void addTaskClick(final String text, final String date, final String time);

}

}

0 个答案:

没有答案