Это Android Проект с использованием фреймворка Mobius от Spotify. Я в основном начал и столкнулся с этой проблемой, текст выбранной строки не отображается, как будто он застрял по умолчанию, который является «Все задачи», однако, когда я изменяю параметр во всплывающем меню, он не обновляется. с указанием c заголовка. Оставив меня очень потерянным. Любой другой код, необходимый просто спросите, спасибо.
Всплывающие окна
Когда нажата активированная или завершенная, она не обновляется
public class TasksFragment extends Fragment {
private MobiusLoop.Controller<TasksListModel, TasksListEvent> mController;
private PublishSubject<TasksListEvent> mMenuEvents = PublishSubject.create();
private TasksViews mViews;
private DeferredEventSource<TasksListEvent> mEventSource = new DeferredEventSource<>();
public static TasksFragment newInstance() {
return new TasksFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
FloatingActionButton fab = getActivity().findViewById(R.id.fab_add_task);
mViews = new TasksViews(inflater, container, fab, mMenuEvents);
mController = TasksInjector.createController(
createEffectHandler(getContext(), mViews, this::showAddTask, this::showTaskDetailsUI),
mEventSource,
resolveDefaultModel(savedInstanceState));
mController.connect(contramap(TasksListViewDataMapper::tasksListModelToViewData, mViews));
setHasOptionsMenu(true);
return mViews.getRootView();
}
private TasksListModel resolveDefaultModel(@Nullable Bundle savedInstanceState) {
return savedInstanceState != null ? tasksListModelFromBundle(savedInstanceState.getBundle("model")) : TasksListModel.DEFAULT;
}
@Override
public void onResume() {
super.onResume();
mController.start();
}
@Override
public void onPause() {
mController.stop();
super.onPause();
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle("model", taskListModelToBundle(mController.getModel()));
}
@Override
public void onDestroyView() {
mController.disconnect();
super.onDestroyView();
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.tasks_fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_clear:
mMenuEvents.onNext(clearCompletedTaskRequested());
break;
case R.id.menu_filter:
showFilteringPopupMenu();
break;
case R.id.menu_refresh:
mMenuEvents.onNext(refreshRequested());
break;
}
return true;
}
private void onFilterSelected(TasksFilterType filter) {
mMenuEvents.onNext(filterSelected(filter));
}
private void showFilteringPopupMenu() {
PopupMenu popup = new PopupMenu(getContext(), getActivity().findViewById(R.id.menu_filter));
popup.getMenuInflater().inflate(R.menu.filter_tasks, popup.getMenu());
popup.setOnMenuItemClickListener(
item -> {
switch(item.getItemId()) {
case R.id.active:
onFilterSelected(TasksFilterType.ACTIVE_TASKS);
break;
case R.id.completed:
onFilterSelected(TasksFilterType.COMPLETED_TASKS);
break;
default:
onFilterSelected(TasksFilterType.ALL_TASKS);
break;
}
return true;
}
);
popup.show();
}
public void showAddTask() {
// startActivityForResult(AddEditTaskActivity.addTask(getContext()), AddEditTaskActivity.REQUEST_ADD_TASK);
}
public void showTaskDetailsUI(Task task) {
// startActivity(TaskDetailActivity.showTask(getContext(), task));
}}
Код, который я надеюсь, сработает:
public class TasksListViewDataMapper {
public static TasksListViewData tasksListModelToViewData(TasksListModel model) {
return TasksListViewData.builder()
.loading(model.loading())
.filterLabel(getFilterLabel(model.filter()))
.viewState(getViewState(model.tasks(), model.filter()))
.build();
}
private static ViewState getViewState(@Nullable ImmutableList<Task> tasks, TasksFilterType filter) {
if(tasks == null) return ViewState.awaitingTasks();
ImmutableList<Task> filteredTasks = TaskFilters.filterTasks(tasks, filter);
if(filteredTasks.isEmpty()) {
return ViewState.emptyTasks(createEmptyTaskViewData(filter));
} else {
return ViewState.hasTasks(copyOf(transform(filteredTasks, TaskViewDataMapper::createTaskViewData)));
}
}
private static int getFilterLabel(TasksFilterType filterType) {
switch (filterType) {
case ACTIVE_TASKS:
return R.string.label_active;
case COMPLETED_TASKS:
return R.string.label_completed;
default:
return R.string.label_all;
}
}
}
Если вы видите мою ошибку или работали с этой проблемой, прежде чем ваша помощь будет принята с благодарностью. Спасибо
Репо на Github