コンポーネント間通信

2571 ワード

コンポーネント間通信
  • EventBusは、ActivityでEventBusを登録し、Activityでメッセージ購読受信メッセージを書き込み、fragmentでメッセージを送信する通信を実現する.
  •     @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    
    
        @Subscribe(threadMode = ThreadMode.MAIN)
        public void onEvent(String message) {
            mViewPager.setCurrentItem(0);
            mTab.setCurrentTab(0);
        }
    

    fragmentでメッセージを送信
    btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EventBus.getDefault().post("000000");
    
            }
        });
    
  • インタフェースコールバック
  • fragmentでインタフェースを定義し、インタフェースに値を割り当てます.Interface=(getActivity()interface.Activityでインタフェースを実装すればよい.
    ISubmit iSubmit;// 
    
        public interface ISubmit {
                void refresh();
            }
    
    interfaceBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                iSubmit = (ISubmit) getActivity();
                iSubmit.refresh();
            }
        }); 
    

    Activityでインタフェースを実装すればよい
    public class MainActivity extends BaseActivity implements MessageFragment.ISubmit {
    
              @Override
              public void refresh() {
            Toast.makeText(getApplicationContext(), " ", Toast.LENGTH_LONG).show();
    
            }
    
        }
    
  • Handlerメッセージ
  • Activityでhandlerオブジェクトを作成し、handlerオブジェクトを取得する方法を作成し、fragmentでgetActivity()を現在のActivityに強く変換してHandlerオブジェクトを取得し、メッセージを送信します.
    public Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 100:
                    Toast.makeText(getApplicationContext(), " handler", Toast.LENGTH_LONG).show();
                    mViewPager.setCurrentItem(0);
                    mTab.setCurrentTab(0);
                    break;
            }
        }
    };
    
    
    public Handler getHandler(){
        return handler;
    }
    

    fragmentで
     handler = ((MainActivity) mActivity).getHandler();
    
     handlerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Message message = new Message();
                message.what = 100;
                handler.sendMessage(message);
            }
        });