1、Activity之间的跳转有两种:
(1)不需要返回值的跳转:startActivity(new Intent(this, Activity.class));
(2)带返回值的跳转:
ActivityA中:startActivityForResult(new Intent(this, ActivityB.class), requestCode);(Intent里存的是要跳转的Activity, requestCode是用来判断是哪个Activity跳转过去的)
ActivityB中:当要返回ActivityA的时候,要用setResult方法,具体如下:setResult(resultCode, Intent);
最后还要在ActivityA中重写onActivityResult方法,来响应ActivityB来的跳转:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {// 其中requestCode就是A跳到B时的flag,resultCode是B返回A的flag,data就是B返回的数据
super.onActivityResult(requestCode, resultCode, data);
// 这里只需要判断requestCode是否等于startActivityForResult()中的code,就可以知道是哪个跳转的。
switch (requestCode) {
case Constant.result_select_province:
if(data != null){
// do something 当然做之前最好要判断下data是否为null,预防发生空指针异常。
}
break;
}
2、Fragment之间的跳转:
我们知道的,Fragment必须附着在Activity上,所以Fragment之间的跳转也必须依赖于Activity。
Fragment必须放在FrameLayout这个布局里面,所以要在XML中加上FrameLayout这个标签,并给id。
MainActivity mainActivity = (MainActivity) getActivity();// 获取当前Fragment所附着的Activity
if (mainActivity.aFragment == null){
mainActivity.aFragment = new aFragment();
}
FragmentManager fm = mainActivity.getSupportFragmentManager();// 这里要导android.support.v4.app.FragmentManager这个包
FragmentTransaction ft = fm.beginTransaction();// import android.support.v4.app.FragmentTransaction;
ft.replace(R.id.fragment, mainActivity.aFragment);// 这里的R.id为所附着Activity的XML文件中FrameLayout标签的id
ft.commit(); // 最后不要忘记commit
}
3、Activity与Fragment之间的跳转:
(1)Fragment跳转到Activity:
startActivity(new Intent(getActivity(), Activity.class));// 首先需要通过getActivity()方法获取到当前Activity
(2)Activity跳转到Fragment:
// Activity不能直接跳转到Fragment,需要先跳转到Fragment所附着的Activity中,然后再更改Activity当前显示哪个Fragment。
intent.putExtra("fragid",1);//首先在Activity跳转之前,在Intent中传入一个flag,用来标记跳转到哪一个Fragment。
// 然后根据flag来判断显示哪个Fragment
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();// import android.support.v4.app.FragmentTransaction;
transaction.replace(R.id.frame_content, new CenterFragment());
transaction.commit();