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

来源:互联网 发布:三维动画演示软件 编辑:程序博客网 时间:2024/05/17 11:37

这里写图片描述

点击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