Почему всплывающее меню не срабатывает, поэтому в заголовке отображается правильный текст? - PullRequest
0 голосов
/ 01 мая 2020

Это 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

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