我想将参数从活动传递到片段,该怎么做?

Activity.java

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


Fragment.java

getViewProfileMainActivity(String Profile, ...);

最佳答案

为了在应用的各个组件之间传递消息,我强烈建议您使用EventBus使用经验丰富的发布者/订阅者解决方案


要将EventBus作为依赖项添加到项目中,请在应用程序级build.gralde文件中添加以下行:


    implementation 'org.greenrobot:eventbus:3.1.1'


请注意,在编写此答案时,最新版本为3.1.1。您应该检查here中的最新版本,并将其包括在内。


将事件类定义为简单的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
    }



在您的Fragment中,添加以下代码以注册到总线或从总线注销:


    @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
        }
    }



事件发生时,您可以按以下方式在Fragment中执行所需的方法:


    @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, ...));


希望这可以帮助!

08-18 19:39