关闭

Android Intent传值

标签: androidbuttonsms
4685人阅读 评论(0) 收藏 举报

Activity 跳转与传值,主要是通过Intent 类来连接多个Activity ,以及传递数据。

 

Intent Android 一个很重要的类。Intent 直译是 意图 ,什么是意图呢?比如你想从这个Activity 跳转到另外一个Activity ,这就是一个意图。Intent 类在Android 系统中的作用很大,在此不详细说了,后面有文章介绍!

 

Activity 跳转,无返回结果

   这是最简单的Activity 跳转方式。从一个Activity 启动另一个Activity ,直接startActivity(new Intent( 当前Activity.this, 下一Activity.class))

1.           ((Button) findViewById(R.id.Notepadv1)).setOnClickListener( new OnClickListener() {  

2.               public void onClick(View v) {  

3.                   startActivity(new Intent (MyAndroidAppActivity.this, Notepadv1.class) );  

4.               }  

5.           }); 

 

Activity 跳转,返回数据/ 结果

   需要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode)

requestCode 的值是自定义的,用于识别跳转的目标Activity

   跳转的目标Activity 所要做的就是返回数据/ 结果,setResult(int resultCode) 只返回结果不带数据,或者setResult(int resultCode, Intent data) 两者都返回!

   而接收返回的数据/ 结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data) ,这里的requestCode 就是startActivityForResultrequestCoderesultCode 就是setResult 里面的resultCode ,返回的数据在data 里面。

 

MyAndroidAppActivity

1.           static final int SEND_SMS_REQUEST = 0; 

2.           static final int CALL_REQUEST = 1; 

3.            

4.           ((Button) findViewById(R.id.sms)).setOnClickListener( new OnClickListener() { 

5.               public void onClick(View v) { 

6.                   Intent intent = new Intent(MyAndroidAppActivity.this, SendSMSActivity.class); 

7.                   startActivityForResult(intent, SEND_SMS_REQUEST);  

8.               } 

9.           }); 

10.        

11.       @Override 

12.       protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

13.           if (requestCode == SEND_SMS_REQUEST ) { 

14.               if (resultCode == RESULT_OK ) { 

15.                   Toast.makeText(this, "Send SMS RESULT_OK", Toast.LENGTH_SHORT).show(); 

16.               }else if (resultCode == RESULT_CANCELED) { 

17.                   Bundle bundle = data.getExtras(); 

18.                   String phoneno = bundle.getString("phoneNO");  

19.                   Toast.makeText(this, "Send SMS RESULT_CANCELED "+phoneno, Toast.LENGTH_SHORT).show(); 

20.               } 

21.           }else if (requestCode == CALL_REQUEST) { 

22.               if (resultCode == RESULT_CANCELED) { 

23.                   Toast.makeText(this, "Call RESULT_CANCELED", Toast.LENGTH_SHORT).show(); 

24.               } 

25.           } 

26.      

 

SendSMSActivity

1.           ((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() { 

2.               public void onClick(View v) { 

3.                   SendSMSActivity. this.setResult(RESULT_OK); 

4.                   SendSMSActivity. this.finish(); 

5.               } 

6.           }): 

 

** 注意,在setResult 后,要调用finish() 销毁当前的Activity ,否则无法返回到原来的Activity ,就无法执行原来ActivityonActivityResult 函数,看到当前的Activity 没反应。

 

    RESULT_OK RESULT_CANCELED 是系统空间里面的常量,不需要自定义,直接使用就行。

 

   另外在运行过程中,发现按Back 键后,是可以返回RESULT_CANCELED 的,看了SDK doc 后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回 RESULT_CANCELED 时并返回数据,那么需要截获Back 键的事件处理,把原来返回RESULT_CANCELED 的核心逻辑copy 到事件处理里面。这里给个例子:

 

1.           ((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() { 

2.               public void onClick(View v) { 

3.                   //  实例化 Bundle ,设置需要传递的参数 

4.                   Bundle bundle = new Bundle(); 

5.                   bundle.putString("phoneNO", "020-123"); 

6.            

7.                   SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity. this.getIntent().putExtras(bundle) ); 

8.                   SendSMSActivity.this.finish(); 

9.               } 

10.       }); 

11.        

12.       @Override 

13.       public boolean onKeyDown(int keyCode, KeyEvent event) { 

14.           //  是否触发按键为back    

15.           if (keyCode == KeyEvent.KEYCODE_BACK ) { 

16.                

17.               //  实例化 Bundle ,设置需要传递的参数 

18.               Bundle bundle = new Bundle(); 

19.               bundle.putString("phoneNO", "020-123"); 

20.                

21.               setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle)); 

22.               this.finish();  

23.               return true; 

24.           }else { 

25.               return super.onKeyDown(keyCode, event); 

26.           } 

27.      

     这里要注意的是,在处理Back 键事件后return true 则表示本事件不再传递给其他函数处理,可理解为由当前函数全权负责处理,所以在returnfinish 当前Activity ,保持原来的行为 表现,当然我们可以设置为隐藏当前Activity 等其他行为。

 

0
0

猜你在找
【直播】机器学习&深度学习系统实战(唐宇迪)
【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
【直播回放】深度学习基础与TensorFlow实践(王琛)
【直播】计算机视觉原理及实战(屈教授)
【直播】机器学习之凸优化(马博士)
【直播】机器学习之矩阵(黄博士)
【直播】机器学习之概率与统计推断(冒教授)
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶(智亮)
【直播】深度学习30天系统实训(唐宇迪)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:94086次
    • 积分:1388
    • 等级:
    • 排名:千里之外
    • 原创:47篇
    • 转载:4篇
    • 译文:0篇
    • 评论:13条
    最新评论