从CrimeListFragment带附加信息跳转到CrimeActivity,并把附加信息给CrimeFragment

这里写图片描述

点击CrimeListFragment的单项跳转到CrimeActivity
用Fragment.startActivity(Intent)或Fragment.startActivityForResult(intent,requestCode)

CrimeActivity.java

public static Intent newIntent(Context context, UUID crimeId)
    {
        Intent intent=new Intent(context,CrimeActivity.class);
        intent.putExtra(CRIME_ID,crimeId);
        return intent;
    }

CrimeFragment需要知道crimeId

方法1:将crimeId作为intent的附加信息,再CrimeFragment中getActivity,再getIntent,再利用键值(注意这个键值是定义在CrimeActivity里的)获得附加信息
这样的方法虽然简单但破坏了fragment的封装型(被特定activity托管,并在其中使用了特定activity才有的键值),CrimeFragment不再是可复用的构建单元,不可用于其他activity

方法2:每个fragment实例都可附带一个Bundle对象
Bundle对象中的一个键值对即一个argument
要在fragment创建后,添加给activity之前,使用
Fragment.setArguments(Bundle)

CrimeFragment.java

public static CrimeFragment newInstance(UUID crimeId)
    {
        Bundle bundle=new Bundle();
        bundle.putSerializable(CRIME_ID_BUNDLE,crimeId);
        CrimeFragment fragment=new CrimeFragment();
        fragment.setArguments(bundle);
        return fragment;
   }

CrimeActivity.java

 @Override
    protected Fragment createNewFragment()
    {
        //注意这里要强转一下
        UUID crimeId=(UUID)getIntent().getSerializableExtra(CRIME_ID);
        CrimeFragment fragment=CrimeFragment.newInstance(crimeId);
        return fragm t;
  }

startActivity后打开CrimeActivity,然后会在newCrimeFragment方法里调用CrimeFragment的newInstance方法,在这个方法中会处理好argument然后创建fragment

然后再CrimeFragment的onCreate方法中,通过getArguments得到Bundle然后获得附加信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值