activity/fragment传值

一、activity间互传:Intent+Bundle

1、不需要回传:

第一个activity中:

        Intent intent = new Intent(MainActivity.this, MainActivityI.class);
        Bundle bundle = new Bundle();
        bundle.putSerializable("homeMessageModel", homeMessageModel);
        ...
        intent.putExtras(bundle);
        startActivity(intent);

第二个activity中:

        Intent intent = this.getIntent();
        Bundle bundle = intent.getExtras();
        HomeMessageModel homeMessageModel = (HomeMessageModel) bundle.getSerializable("homeMessageModel");
        ...

2、需要回传值:

第一个activity中:

                //发送给第二个activity数据
                Intent intent = new Intent();
                intent.setClass(getActivity(), MessageActivity.class);
                Bundle bundle = new Bundle();
                bundle.putSerializable("homeMessageModel", homeMessageModel);
                intent.putExtras(bundle);
                startActivityForResult(intent, 100);


//接受第二个activity数据
  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 100 && resultCode == 200) {
            Bundle bundle = data.getExtras();
            boolean hasPersonalMsg = bundle.getBoolean("hasPersonalMsg");
            Log.e("FeaturedFragment","hasPersonalMsg==="+hasPersonalMsg);
            if (!hasPersonalMsg) {
                mMsgDot.setVisibility(View.GONE);
            } else {
                mMsgDot.setVisibility(View.VISIBLE);
            }
        }

    }

第二个activity中:

 //接收第一个activity的数据
        intent = this.getIntent();
        if (intent != null) {
            bundle = intent.getExtras();
            if (bundle != null) {
                homeMessageModel = (HomeMessageModel) bundle.getSerializable("homeMessageModel");
            }
        }


 //返回给第一个activity的数据,
                bundle.putBoolean("hasPersonalMsg", true);
                intent.putExtras(bundle);
                this.setResult(200, intent);

二、fragment间互传

Fragment间传值三种方式

fragment间传递数据-接口+bundle

三、activity传值给fragment:Bundle

activity中:

                OfficeFragment mFragOffice=new OfficeFragment();
                Bundle bundleOffice = new Bundle();
                bundleOffice.putSerializable("officeMsg", officeMsg);
                mFragOffice.setArguments(bundleOffice);

fragment中

Bundle bundle = getArguments();
if (bundle != null) {
    ArrayList<HomeMsgOfficeModel> officeMsg = (ArrayList<HomeMsgOfficeModel>) bundle.getSerializable("officeMsg");
}

如果在onresume中用这种方法会报错:

    java.lang.IllegalStateException: Fragment already active

解决办法:

在activity中


    private ArrayList<HomeMsgOfficeModel> officeMsg = new ArrayList<>();
    private ArrayList<HomeMsgPersonalModel> personalMsg = new ArrayList<>();

    public ArrayList<HomeMsgOfficeModel> getOfficeMsg() {
        return officeMsg;
    }

    public void setOfficeMsg(ArrayList<HomeMsgOfficeModel> officeMsg) {
        this.officeMsg = officeMsg;
    }

    public ArrayList<HomeMsgPersonalModel> getPersonalMsg() {
        return personalMsg;
    }

    public void setPersonalMsg(ArrayList<HomeMsgPersonalModel> personalMsg) {
        this.personalMsg = personalMsg;
    }

    //网络获取数据后
    personalMsg.addAll(message);
    officeMsg.addAll(gonggao);

然后在fragment中

 personalMsg=((MessageActivity)getActivity()).getPersonalMsg();//获取activity的值
 officeMsg=((MessageActivity)getActivity()).getOfficeMsg();//获取activity的值

参考:android activity中的变量怎么传值给fragment

四、fragment传值给activity

fragment传值给activity:接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值