Как я могу передать параметр из деятельности, чтобы функционировать во фрагменте - PullRequest
0 голосов
/ 18 октября 2019

Я хочу передать свой параметр из действия во фрагмент, как я могу это сделать?

Activity.java

fragment.getViewProfileMainActivity(SendViewProfileName, SendViewProfileEmail, SendViewProfilePhone, SendViewProfileCity, SendViewProfileGender, SendViewProfileBirthdate, SendViewProfilePhotoUrl);

Fragment.java

getViewProfileMainActivity(String Profile, ...);

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Для передачи сообщений между различными компонентами вашего приложения я настоятельно рекомендую вам использовать опытное решение издателя / подписчика, используя EventBus

  • Чтобы добавить EventBus в качестве зависимостив своем проекте добавьте следующую строку в файл build.gralde уровня приложения:
    implementation 'org.greenrobot:eventbus:3.1.1'

Обратите внимание, что на момент написания этого ответа последняя версия была 3.1.1. Вы должны проверить последнюю версию из здесь и включить ее.

  • Определите свой класс событий как простой POJO:
    public class MessageEvent {
        public final String message;

        public MessageEvent(String message) {
            this.message = message;
        }
    }
  • В своем Фрагменте добавьте этот код для прослушивания события
    // This method will be called when a MessageEvent is posted (in the UI thread for Toast)
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {
        Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
        // do something here
    }
  • В своем Фрагменте добавьте этот код для регистрации и отмены регистрации на шине:
    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    public void onStop() {
        EventBus.getDefault().unregister(this);
        super.onStop();
    }
  • Наконец, из вашей Активности публикуйте события:
    EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

Ваш фрагмент получит это сообщение.


Приходя к вашему конкретномуНапример, вы можете сделать это следующим образом:

  • Ваш класс POJO события должен быть:
    public class MessageEvent {
        public final String SendViewProfileName;
        public final String SendViewProfileEmail;
        // similarly other params

        public MessageEvent(String SendViewProfileName, String SendViewProfileEmail, ...) {
            this.SendViewProfileName = SendViewProfileName;
            this.SendViewProfileEmail = SendViewProfileEmail;
            // similarly other params
        }
    }
  • Когда событие происходит, вы можете выполнить желаемоеметод в вашем фрагменте как:
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {
        getViewProfileMainActivity(event.SendViewProfileName, ...);
    }

    private getViewProfileMainActivity(Profile, ...) {
         // your function definition here
    }
  • Из вашей активности вы можете опубликовать событие как:
    EventBus.getDefault().post(new MessageEvent(SendViewProfileName, SendViewProfileEmail, ...));

Надеюсь, это поможет!

1 голос
/ 18 октября 2019

Включено в тренинг по https://developer.android.com/training/basics/fragments/communicating.html#Deliver

Вам просто нужно получить фрагмент в вашей Деятельности

ArticleFragment articleFrag = (ArticleFragment)
                getSupportFragmentManager().findFragmentById(R.id.article_fragment);

и затем обработать, если он еще не существует

0 голосов
/ 18 октября 2019

У меня недостаточно репутации, чтобы оставить комментарий.

У вас есть похожий ответ здесь

Надеюсь, это поможет!

...