Измените поведение «Плавающей кнопки действия» в соответствии с текущим фрагментом

Я внедрил setOnClickListener() FAB в MainActivity, и он работает без проблем.

У меня есть 8 разных фрагментов (один показывает WebView, другой загружает RecyclerView и т. д.) на основе выбора из навигационного ящика.

Появляется FAB, и его текущее действие воспроизводит песню по умолчанию, которая работает нормально.

Теперь из моих 8 разных фрагментов 3 фрагмента показывают другой список песен.
Поскольку FAB отображается по умолчанию, я хочу использовать FAB в качестве кнопки воспроизведения.

Итак, если пользователь находится в одном фрагменте, выбирает mp3 и щелкает FAB, он должен воспроизвести эту песню.
Это означает, что я должен каким-то образом перезаписать setOnClickListener MainActivitiy на тот, который реализован во фрагменте.

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

По сути, FAB должен переопределить свои действия и принимать данные от текущего фрагмента.

Один из способов, который я могу придумать, это когда вызывается fab.setOnClickListener, я проверю текущий фрагмент и буду действовать в соответствии с ним.

Но проблема в том, чтобы воспроизвести песню, я создаю Intent со многими параметрами и вызываю startservice.

Если я могу что-то сделать в самом фрагменте, я могу создать намерение, связать необходимые аргументы и т. д. в setOnClickListener().

Любые предложения по устранению моей путаницы высоко ценятся.


person Sudarshan sridhar    schedule 20.04.2016    source источник
comment
Поместите свое решение в ответ, а не в вопрос.   -  person Farbod Salamat-Zadeh    schedule 21.04.2016


Ответы (1)


Я попробовал способ ниже, и он работает нормально. Добавляю его как ответ на мой вопрос, так как он работает.

Подход:

Реализована функция с общим названием playAudio() во всех фрагментах, где предполагается воспроизведение медиафайлов. В MainActivity, onClick() плавающей кнопки действия, я проверяю экземпляр текущего фрагмента. Если это среди 3 из 8, которые должны воспроизводить соответствующий звук при потрясающем щелчке, я вызываю фрагмент playAudio(). для остальных фрагментов, делая что-то еще. Ниже фрагмент кода:

    @Override
    onClick(View v) {
     Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container_body);
                if (fragment != null && fragment.isMenuVisible()) {
                    if (fragment instanceof FragmentAudioMessage) {
                        ((FragmentAudioMessage) fragment).initPlay();
                    } else {
                      //do something else.
                    }
                }

Таким образом, он работает по-разному для каждого фрагмента.

Надеюсь, это поможет другим.

person Sudarshan sridhar    schedule 21.04.2016