Activity之间、Fragment之间和Activity与Fragment之间的跳转

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();

你可能感兴趣的:(技术分享)