How to pass data between fragments

后端 未结 13 3007
醉话见心
醉话见心 2020-11-22 07:03

Im trying to pass data between two fragmens in my program. Its just a simple string that is stored in the List. The List is made public in fragments A, and when the user cli

13条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 07:07

    1- The first way is define an interface

    public interface OnMessage{
        void sendMessage(int fragmentId, String message);
    }
    
    public interface OnReceive{
        void onReceive(String message);
    }
    

    2- In you activity implement OnMessage interface

    public class MyActivity implements OnMessage {
       ...
       @Override
       public void sendMessage(int fragmentId, String message){
           Fragment fragment = getSupportFragmentManager().findFragmentById(fragmentId);
           ((OnReceive) fragment).sendMessage();
       }
    }
    

    3- In your fragment implement OnReceive interface

    public class MyFragment implements OnReceive{
        ...
        @Override
        public void onReceive(String message){
            myTextView.setText("Received message:" + message);
        }
    }
    

    This is the boilerplate version of handling message passing between fragments.

    Another way of handing data passage between fragments are by using an event bus.

    1- Register/unregister to an event bus

    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    
    @Override
    public void onStop() {
        EventBus.getDefault().unregister(this);
        super.onStop();
    }
    

    2- Define an event class

    public class Message{
        public final String message;
    
        public Message(String message){
            this.message = message;
        }
    }
    

    3- Post this event in anywhere in your application

    EventBus.getDefault().post(new Message("hello world"));
    

    4- Subscribe to that event to receive it in your Fragment

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessage(Message event){
        mytextview.setText(event.message);
    }
    

    For more details, use cases, and an example project about the event bus pattern.

提交回复
热议问题