Presenter
public interface TasksContract {
interface View extends BaseView<Presenter> {
void setLoadingIndicator(boolean active);
void showTasks(List<Task> tasks);
void showAddTask();
void showTaskDetailsUi(String taskId);
void showTaskMarkedComplete();
void showTaskMarkedActive();
void showCompletedTasksCleared();
void showLoadingTasksError();
void showNoTasks();
void showActiveFilterLabel();
void showCompletedFilterLabel();
void showAllFilterLabel();
void showNoActiveTasks();
void showNoCompletedTasks();
void showSuccessfullySavedMessage();
boolean isActive();
void showFilteringPopUpMenu();
}
interface Presenter extends BasePresenter {
void result(int requestCode, int resultCode);
void loadTasks(boolean forceUpdate);
void addNewTask();
void openTaskDetails(@NonNull Task requestedTask);
void completeTask(@NonNull Task completedTask);
void activateTask(@NonNull Task activeTask);
void clearCompletedTasks();
void setFiltering(TasksFilterType requestType);
TasksFilterType getFiltering();
}
}
//BaseView.java
public interface BaseView<T> {
void setPresenter(T presenter);
}
//BasePresenter.java
public interface BasePresenter {
void start();
}
Google将Fragment看作一个V而不是Activity,所以这里用Fragment来实现V接口。
public class ShowActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_fragment);
}
@Override
protected void findViews() {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_user_profile, menu);
return true;
}
@Override
protected void init() {
UserProfileShowFragment fragment =
(UserProfileShowFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
if (fragment == null) {
fragment = UserProfileShowFragment.newInstance();
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(),
fragment, R.id.contentFrame);
}
UserProfileShowPresenter presenter = new UserProfileShowPresenter(fragment, this);
fragment.setPresenter(presenter);
}
}
public class UserProfileShowFragment extends BaseFragment implements UserProfileShowContract.View {
private UserProfileShowContract.Presenter mPresenter;
public static UserProfileShowFragment newInstance() {
Bundle args = new Bundle();
UserProfileShowFragment fragment = new UserProfileShowFragment();
fragment.setArguments(args);
return fragment;
}
public void setPresenter(@NonNull UserProfileShowContract.Presenter presenter) {
mPresenter = presenter;
}
}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/contentFrame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/id_toolbar"></FrameLayout></RelativeLayout>