Получение даты от фрагмента диалога к фрагменту - PullRequest
0 голосов
/ 30 июня 2019

Кажется, есть много вопросов, связанных с этой темой.Когда я прочитал большинство из них, у меня была одна проблема.Обычно люди пытаются создать фрагмент, а затем создать оттуда фрагмент диалога.Таким образом, фрагмент диалога находится внутри фрагмента.

В моем случае я создал кнопку, которая открывает диалоговый фрагмент на панели инструментов.Затем я открываю свой основной фрагмент с панели навигации.Таким образом, фрагмент диалога и мой основной фрагмент вызывается через одно и то же основное действие, только в разных местах.Я не могу вызвать фрагмент диалога изнутри фрагмента, так как он вызывается при выборе пунктов меню.

Я пытался создать интерфейс с слушателем, когда я пытаюсь создать newFragment.setTargetFragment (что-то здесь, 1);Я понятия не имею о том, что я должен положить на поле чего-то здесь.getactivity, foodworkoutfragment и .this неправильные)

Я также пытался сделать так, чтобы мой фрагмент расширял Dialogfragment вместо этого, но это порождает мой фрагмент каждый раз, когда я нажимаю кнопку, что кажется ужасным способом сделать это.

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.date_picker) {

            DialogFragment newFragment = new DatePickerFragment();

            newFragment.show(getSupportFragmentManager(), "datePicker");

            return true;
        }

        return super.onOptionsItemSelected(item);
    }

@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.mealworkoutTab) {
            iconShow = true;
            invalidateOptionsMenu();
            FragmentTransaction mealsworkoutsFrag = getSupportFragmentManager().beginTransaction();
            mealsworkoutsFrag.replace(R.id.flMain,new MealsWorkoutsFragment());
            mealsworkoutsFrag.commit();
        } else if (id == R.id.userinfoTab) {
            iconShow = false;
            invalidateOptionsMenu();
            FragmentTransaction userInfoFrag = getSupportFragmentManager().beginTransaction();
            userInfoFrag.replace(R.id.flMain,new UserInfoFragment());
            userInfoFrag.commit();

        } else if (id == R.id.logoutTab) {
            auth.signOut();
        }

        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

Я предполагаю, что простое решение должно существовать, так как это выглядит немного тривиально (получить sth из фрагмента диалога во фрагмент)

1 Ответ

0 голосов
/ 30 июня 2019

В таких случаях рекомендуется использовать библиотеку типа EventBus для передачи и прослушивания "событий" и передачи данных.Так что в вашем случае, когда пользователь выбирает дату, публикуется «событие» с выбранной полезной нагрузкой даты.Это событие затем перехватывается внутри вашего фрагмента (поскольку вы заставляете свой фрагмент подписываться на это конкретное событие), а затем вы можете обрабатывать полезную нагрузку (выбранную дату) так, как вам нравится.

Если вышеприведенное звучит слишком сложно для выполнения илифото, пожалуйста, перейдите по ссылке выше.У него есть примеры кодов.Эта библиотека чрезвычайно проста в реализации и весьма полезна в таких сценариях.

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