Activity,fragment的跳转

1、Activity之间的跳转有两种:

(1)不需要返回值的跳转:

  1. Intent intent = new Intent(A.this, B.class)

  2. startActivity(intent);

(2)带返回值的跳转:

Intent intent = new Intent(A.this,B..class);
        //把数据封装至bundle对象中
        Bundle bundle = new Bundle();
        bundle.putString("name","张三" );
        bundle.putString("age", "18");
        //把bundle对象封装至intent对象中
        intent.putExtras(bundle);
        startActivity(intent);

B接收Intent intent = getIntent();
        //从intent对象中把封装好的数据取出来      
        Bundle bundle = intent.getExtras();
        String maleName = bundle.getString("name");
        String feMaleName = bundle.getString("age");

 

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;

}

startActivityForResult与startActivity的不同之处在于: 
1、startActivity( ) 
仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。 
2、startActivityForResult( ) 
可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T1Activity中的onActivityResult( )方法。
 

 

Intent intent=new Intent(); 
intent.setClass(A.this, B.class); 
Bundle bundle=new Bundle(); 
String str1=”aaaaaa”; 
bundle.putString(“str1”, str1); 
intent.putExtras(bundle); 
startActivityForResult(intent, 0);//这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0

2.重写onActivityResult方法(在A里面),用来接收B回传的数据。

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK 
case RESULT_OK: 
Bundle b=data.getExtras(); //data为B中回传的Intent 
String str=b.getString(“str1”);//str即为回传的值 
break; 
default: 
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。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值