activity回传数据

第一个activity代码:

[java]  view plain copy
  1. package cn.com.chenzheng_java;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.TextView;  
  10.   
  11. public class ForResultActivity extends Activity {  
  12.     private TextView textView;  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.         textView = (TextView)findViewById(R.id.textView2);  
  18.         Button button = (Button)findViewById(R.id.button12);  
  19.           
  20.         button.setOnClickListener(new OnClickListener() {  
  21.               
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 run();  
  25.                   
  26.             }  
  27.         });  
  28.   
  29.     }  
  30.   
  31.     private void run() {  
  32.         Intent intent = new Intent();  
  33.         intent.putExtra("name""chenzheng_java");  
  34.         intent.putExtra("age"23);  
  35.         intent.putExtra("isMan"true);  
  36.         intent.putExtra("description""送你一个帅哥");  
  37.         intent.setClass(ForResultActivity.this, ReturnResultActivity.class);  
  38.         // 通过该方法可以获取后边的activity返回的数据(主要还是通过intent进行交互的)  
  39.         startActivityForResult(intent, 1);  
  40.     }  
  41.   
  42.     /*** 
  43.      * 想要获取后边的activity中返回的内容就要重写该方法 该方法将会在后边的activity调用setResult方法后被触发。 
  44.      * requestCode 请求码 
  45.      * 即我们在startActivityForResult中指定的那个1,我们可以通过这个标识判断,后边activity返回的是不是我们请求的东西 
  46.      * resultCode 返回的结果码    后边的activity给我们的一个标识状态信息的值 
  47.      * data 返回的intent对象 
  48.      */  
  49.     @Override  
  50.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  51.         switch (resultCode) {  
  52.         case RESULT_OK:  
  53.             Bundle bundle = data.getExtras();  
  54.             String info = bundle.getString("info");  
  55.             textView.setText(info+" requestCode="+requestCode);  
  56.             break;  
  57.   
  58.         default:  
  59.             break;  
  60.         }  
  61.     }  
  62.   
  63. }  

第二个activity代码:

[java]  view plain copy
  1. package cn.com.chenzheng_java;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.EditText;  
  9.   
  10. public class ReturnResultActivity extends Activity {  
  11.   
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.layout1);  
  16.         Button button = (Button)findViewById(R.id.button);  
  17.         button.setOnClickListener(new View.OnClickListener(){  
  18.             @Override  
  19.             public void onClick(View v) {  
  20.                 Intent intent2 = new Intent();  
  21.                 intent2.putExtra("info""hahahaha");  
  22.                 // 通过调用setResult方法返回结果给前一个activity。  
  23.                 ReturnResultActivity.this.setResult(RESULT_OK, intent2);  
  24.                 //关闭当前activity  
  25.                 ReturnResultActivity.this.finish();  
  26.             }});  
  27.     }  
  28. }  

记住,要在androidmanifest.xml文件中声明两个activity哦,代码如下:

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="cn.com.chenzheng_java"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="8" />  
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name=".ForResultActivity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.         <!-- 这里一定要声明该activity,否则系统是找不到该activity的 -->  
  17.     <activity android:name="ReturnResultActivity"></activity>  
  18.     </application>  
  19. </manifest>  

-------------------------------------------------------------------------

让我们来总结下,关于activity之间相互跳转的问题:

       activity与activity之间的跳转是通过意图Intent进行的。

intent有一个setClass方法,Intent setClass(Context packageContext, Class<?> cls)第一个参数为当前context,第二个参数为要跳转到的activity。

      我们跳转时,可以通过startActivity()方法进行跳转,这样的跳转是没有返回值的。如果你想要后边的activity返回给当前activity一些数据的话,那么只能通过startActivityForResult()方法。void startActivityForResult(Intent intent, int requestCode),第一个参数为intent,第二个参数为一个请求码,这个数字是你自己设定的。

      除此之外,我们要想获得后边的activity返回给我们的数据,我们还要在当前activity中实现,onActivityResult(int requestCode, int resultCode, Intent data) 方法,其中requestCode与startActivityForResult方法中的requestCode保持一致。(requestCode实际上很有用,如果我们当前的activity可以跳转到很多activity,并且每一个activity都会返回给你数据,那么我们是如何判断到底返回的数据是哪个请求的呢,这里就是用的requestCode)。

      在后边的activity中(被我们通过startActivityForResult方法启用的activity),我们通过this.setResult()方法来返回数据,setResult(int resultCode, Intent data)第一个参数为标识位,就是我们前一个activity实现onActivityResult方法时的resultCode,我们可以通过该值知道数据处理是否成功。

可能取值为:RESULT_CANCELED     RESULT_OK    RESULT_FIRST_USER。

     在setResult()之后调用finish方法是为了销毁当前activity,让前一个activity获得显示机会。

此外,还可以通过 intent.setClassName(String packageName, String className) 方法设置跳转目标,其中packageName是当前activity的包名称,className是目标activity的全路径名,这里一定要注意,是全路径名称!

当然还有Intent 的setClassName(Context packageContext, String className)也是同样的功能,这里贴出他们的api部分。

转自:http://blog.csdn.net/chenzheng_java/article/details/6232487


另android.support.v4.app.Fragment无法接收onActivityResult方法的解决办法:

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

        List<Fragment> fragments = getChildFragmentManager().getFragments();
        if (fragments != null) {
            for (Fragment fragment : fragments) {
                fragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }
参考:http://stackoverflow.com/questions/13580075/onactivityresult-not-called-in-new-nested-fragment-api



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值