fragment之间的信息交互——onActivityResult()不经过Activity

Fragment间通信技巧
本文介绍了一种在Android应用中,不使用Activity的onActivityResult()方法实现Fragment之间信息传递的方法。核心思路是,FirstFragment通过获取SecondFragment的实例,并直接调用其onActivityResult()方法来完成数据的交互。
1.本文讲述如何fragment与fragment之间互传信息,不用使用Activity的onActivityResult()方法

核心思想:FirstFragment获取到SecondFragment的对象,然后调用SecondFragment的onActivityResult()方法

CrimeFragment.java
private static final int REQUEST_DATE = 0;
private static final String DIALOG_NAME = "dateDialog";
private Crime mCrime;

mDateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fm = getActivity().getSupportFragmentManager();
                DateDialog dateDialog = DateDialog.newInstance(mCrime.getDate());
             dateDialog.setTargetFragment(CrimeFragment.this,REQUEST_DATE);
//最重要的方法:获取Fragment对象
                dateDialog.show(fm,DIALOG_NAME);
            }
        });
//重写onActivityResult()方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_DATE){ Date date = (Date)data.getSerializableExtra(EXTRA_NEW_DATE); mDateBtn.setText(date.toString()); mCrime.setDate(date); } }
DialogFragment.java
new AlertDialog.Builder(getActivity())
                .setView(v)
                .setTitle(R.string.setDate)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (getTargetFragment() == null)
                            return;
                        Intent intent = new Intent();
                        intent.putExtra(CrimeFragment.EXTRA_NEW_DATE,mDate);
                        getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK,intent);
//getTargetFragment()获取对象并调用onActivityResult方法
                    }
                })
                .create();

 

转载于:https://www.cnblogs.com/rookiechen/p/5231716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值