android Activity与Fragment之间的通信

本文介绍了Android开发中Activity与Fragment之间的三种通信方式:通过onAttach方法、使用Handler及BroadcastReceiver。具体包括如何定义接口、实现通信逻辑等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用onAttach方法实现

1、activity----->fragment

activity代码:
    private OnMainListener mainListener;
    // 绑定接口
    @Override
    public void onAttachFragment(Fragment fragment) {
        try {
            mainListener = (OnMainListener)fragment;
        } catch (Exception e) {
            throw newClassCastException(this.toString() + " must implementOnMainListener");
        }
        super.onAttachFragment(fragment);
    }
    // 接口
    public interface OnMainListener {
        public void onMainAction();
    }
onMainAction方法是activity向fragment发出通信的方法,里面可以放参数, 在要发出通信的地方直接调用该方法即可。
fragment代码:

public class MyFragment extends Fragment implementsOnMainListener {
        ……………………
        @Override
        public voidonMainAction() {
            //这里是实现通信的接口
        }

2、fragment ---->activity

fragment代码:
private OnFragmentListener mListener;
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentListener) activity;
        } catch (ClassCastException e) {
            throw newClassCastException(activity.toString() + " must implement OnFragmentListener");
        }
    }
    public interface OnFragmentListener {
        public void onFragmentAction(intflag);
    }
activity代码:
  public class MainActivity extends Activity implements OnFragmentListener{
        ………………
        // 实现接口方法
        @Override
        public voidonFragmentAction(int flag) {
            //实现通信的接口
        }


    }

二、使用handler通信

接收方代码:

    public Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg != null) {
                switch (msg.what) {
                    case BaseConstant.SHOW_CHECK_IN:

                        right_text.setText(getString(R.string.calendar_checkin1));
                        break;
                    case BaseConstant.SHOW_CHECK_OUT:

                        right_text.setText(getString(R.string.calendar_checkout1));
                        break;
                    case BaseConstant.SHOW_CHECK_NOTHING:
                        right_text.setText("");

                        break;

                    default:
                        break;
                }
            }
        }

    };

发送方代码:

获得handler实例

        MarketDetailActivity activity = (MarketDetailActivity) getActivity();
        handler = activity.handler;

发送消息

        handler.sendEmptyMessage(flag);


三、使用BroadcastReceiver通信

这里就不贴代码了,可以参考BraodcastReceiver的相关使用使用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值