关闭

android Activity与Fragment之间的通信

标签: androidfragmentavtivity通信
114人阅读 评论(0) 收藏 举报
分类:

一、使用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的相关使用使用。



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5349次
    • 积分:152
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:14篇
    • 译文:0篇
    • 评论:0条
    文章分类