• 安卓开发_startActivityForResult的详细用法


    一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据

    百度了一下,发现startActivityForResult这个很完美的符合了我的效果要求。

    正文:

    startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法。

    这里看下Demo,一共两个activity 

    让我们来看下代码:

     1 package other;
     2 
     3 import com.example.allcode.R;
     4 
     5 import android.app.Activity;
     6 import android.content.Intent;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.view.View.OnClickListener;
    10 import android.widget.Button;
    11 import android.widget.TextView;
    12 
    13 public class Use_startActivityForResult_frist extends Activity implements OnClickListener{
    14     private TextView text_frist;
    15     private TextView text_second;
    16     private Button btn_frist;
    17     private Button btn_second;
    18     int requestCode = 0;
    19     Intent intent;
    20     @Override
    21     protected void onCreate(Bundle savedInstanceState) {
    22         // TODO Auto-generated method stub
    23         super.onCreate(savedInstanceState);
    24         setContentView(R.layout.other_frist_activity);
    25         text_frist = (TextView) findViewById(R.id.id_frist_text);
    26         text_second = (TextView) findViewById(R.id.id_second_text);
    27         btn_frist = (Button) findViewById(R.id.btn_frist);
    28         btn_second = (Button) findViewById(R.id.btn_second);
    29         btn_frist.setOnClickListener(this);
    30         btn_second.setOnClickListener(this);
    31         
    32 
    33      intent = new Intent();
    34     intent.setClass(Use_startActivityForResult_frist.this,Use_startActivityForResult_second.class);
    35 
    36     }
    37     @Override
    38     public void onClick(View v) {
    39         // TODO Auto-generated method stub
    40         switch (v.getId()) {
    41         case R.id.btn_frist:
    42             // 请求码的值随便设置,但必须>=0
    43             requestCode = 0;
    44             startActivityForResult(intent, requestCode);
    45             break;
    46         case R.id.btn_second:
    47             requestCode = 2;
    48             startActivityForResult(intent, requestCode);
    49             break;
    50         default:
    51             break;
    52         }
    53         
    54     }
    55 
    56 
    57     // 回调方法,从第二个页面回来的时候会执行这个方法
    58     @Override
    59     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    60         String change01 = data.getStringExtra("change01");       //获取change01 对应的数据
    61         String change02 = data.getStringExtra("change02");       //获取change02 对应的数据
    62         // 根据上面发送过去的请求吗来区别
    63         switch (requestCode) {
    64         case 0:
    65             text_frist.setText(change01);    //根据请求码执行相应的操作
    66             break;
    67         case 2:
    68             text_second.setText(change02);
    69             break;
    70         default:
    71             break;
    72         }
    73         
    74     }
    75 
    76 
    77 }
    第一个Activity
     1 package other;
     2 
     3 import com.example.allcode.R;
     4 
     5 import android.app.Activity;
     6 import android.content.Intent;
     7 import android.os.Bundle;
     8 
     9 public class Use_startActivityForResult_second extends Activity{
    10     int resultCode = 0;
    11         @Override
    12         protected void onCreate(Bundle savedInstanceState) {
    13             // TODO Auto-generated method stub
    14             super.onCreate(savedInstanceState);
    15             setContentView(R.layout.other_second_activity);
    16             
    17             Intent intent = new Intent();
    18             intent.putExtra("change01", "第一行值已经改变,现在为:1000");  //给change01参数一个值1000 
    19             intent.putExtra("change02", "第二行值已经改变,现在为:2000");  //给change02参数一个值2000    注意这个值,即第二个参数必须是字符串类型的
    20             // 设置结果,并进行传送
    21             this.setResult(resultCode, intent);
    22             this.finish();
    23         }
    24 
    25 }
    第二个Activity
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7 <TextView  
     8     android:id="@+id/id_frist_text"
     9     android:layout_width="fill_parent" 
    10     android:layout_height="wrap_content" 
    11     android:text="第一行文本信息"
    12     />
    13 <TextView  
    14     android:id="@+id/id_second_text"
    15     android:layout_width="fill_parent" 
    16     android:layout_height="wrap_content" 
    17     android:text="第二行文本信息"
    18     />
    19 <Button 
    20     android:id="@+id/btn_frist"
    21     android:layout_width="fill_parent" 
    22     android:layout_height="wrap_content"
    23     android:text="改变第一行文本的值"
    24     />
    25 <Button 
    26     android:id="@+id/btn_second"
    27     android:layout_width="fill_parent" 
    28     android:layout_height="wrap_content"
    29     android:text="改变第二行文本的值"
    30     />
    31 </LinearLayout>
    第一个activity对应的布局文件

    效果图:

    请求码的作用                

    使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法(该方法需要重写)。

    结果码的作用

    在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity):

  • 相关阅读:
    petshop数据库(一部分,待续)
    asp:Wizard导航的应用CheckOut.aspx
    web层的控件之二AddressForm
    表现层笔记之页面是如何调用
    petshop缓存依赖的工厂模式
    研究sohu前台浏览器兼容标准
    petshop缓存依赖及困惑
    web层的控件之三CartList
    初涉CSS Hack
    模糊关联规则挖掘
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4525934.html
Copyright © 2020-2023  润新知