使用fragment的argument

一、在fragment中启动Activity

与在Activity中启动类似。下面代码是当点击ListFragment中的某行时,启动一个Activity。

@Override

public void onListItemClick(ListView l, View v,int position,long id) {

Crime crime=((CrimeAdapter)this.getListAdapter()).getItem(position);

Intent intent=new Intent(this.getActivity(),CrimeActivity.class);

this.startActivity(intent);

}

二、附加extra信息

intent.putExtra(CrimeFragment.EXTRA_CRIME_ID,crime.getmId());

第二个参数需要Serializable。

this.startActivity(intent);

三、在被启动的Activity关联的Fragment中获取extra信息

1)简单方式

@Override

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

UUID crime_id=(UUID)this.getActivity().getIntent().getSerializableExtra(CrimeFragment.EXTRA_CRIME_ID);

this.crime=CrimeLab.get(this.getActivity()).getCrime(crime_id);

}

2)fragment的argument方式

给fragment对象传参:

public static CrimeFragment newCrimeFragment(UUID uuid){

Bundle bundle=newBundle();

bundle.putSerializable(CrimeFragment.EXTRA_CRIME_ID,uuid);

CrimeFragment fragment=new CrimeFragment();

fragment.setArguments(bundle);

returnfragment;

}

fragment获取参数:

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.i(tag,"CrimeFragment.onCreate()");

//UUID crime_id=(UUID) this.getActivity().getIntent().getSerializableExtra(CrimeFragment.EXTRA_CRIME_ID);

UUID crime_id=(UUID)this.getArguments().getSerializable(CrimeFragment.EXTRA_CRIME_ID);

this.crime=CrimeLab.get(this.getActivity()).getCrime(crime_id);

}

四、刷新ListFragment中的记录

public void onResume() {

super.onResume();

((CrimeAdapter)this.getListAdapter()).notifyDataSetChanged();

}

五、fragment从被启动的Activity中获取返回结果

先改变启动方式

//this.startActivity(intent);

this.startActivityForResult(intent,10);

重写下面的方法使得fragment获取结果

public void onActivityResult(int requestCode,int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

System.out.println(requestCode+":"+resultCode);

}

你可能感兴趣的:(使用fragment的argument)