startActivityForResult

本文介绍Android中Activity间如何传递返回值,并通过一个具体示例进行说明:用户选择城市后将结果返回到上一Activity。涉及Activity的启动方式、请求码与结果码的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇里面写了Activity之间的传值,这一篇里面写写怎么启动一个新的Activity之后,得到它的返回值

获得返回值需要重写当前Activity的onActivityResult(int requestCode,int resultCode,Intent intent),requestCode代表请求码,而resultCode代表结果码

下面是一个例子,点击按钮,弹出城市选择框,选中的城市返回显示到文本框上


界面xml如下

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TableLayout  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content" >  
  10.   
  11.         <TableRow  
  12.             android:id="@+id/tableRow1"  
  13.             android:layout_width="wrap_content"  
  14.             android:layout_height="wrap_content" >  
  15.   
  16.             <Button  
  17.                 android:id="@+id/bn"  
  18.                 android:layout_width="wrap_content"  
  19.                 android:layout_height="wrap_content"  
  20.                 android:text="选择您所在的城市" />  
  21.   
  22.             <EditText  
  23.                 android:id="@+id/city"  
  24.                 android:layout_width="fill_parent"  
  25.                 android:layout_height="wrap_content"  
  26.                 android:ems="10" android:width="180dp">  
  27.   
  28.                 <requestFocus />  
  29.             </EditText>  
  30.   
  31.         </TableRow>  
  32.   
  33.         <TableRow  
  34.             android:id="@+id/tableRow2"  
  35.             android:layout_width="wrap_content"  
  36.             android:layout_height="wrap_content" >  
  37.         </TableRow>  
  38.   
  39.         <TableRow  
  40.             android:id="@+id/tableRow3"  
  41.             android:layout_width="wrap_content"  
  42.             android:layout_height="wrap_content" >  
  43.         </TableRow>  
  44.   
  45.         <TableRow  
  46.             android:id="@+id/tableRow4"  
  47.             android:layout_width="wrap_content"  
  48.             android:layout_height="wrap_content" >  
  49.         </TableRow>  
  50.     </TableLayout>  
  51.   
  52. </LinearLayout>  

代码如下,重点是onActivityResult方法

[java]  view plain copy print ?
  1. package WangLi.Activity.ActivityForResult;  
  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.EditText;  
  10.   
  11. public class ActivityForResult extends Activity {  
  12.     Button bn;  
  13.     EditText city;  
  14.     /** Called when the activity is first created. */  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         //获取界面上的组件  
  20.         bn = (Button)findViewById(R.id.bn);  
  21.         city = (EditText)findViewById(R.id.city);  
  22.         bn.setOnClickListener(new OnClickListener(){  
  23.             public void onClick(View source)  
  24.             {  
  25.                 //创建需要对应于目标Activity的Intent  
  26.                 Intent intent = new Intent(ActivityForResult.this,SelectCityActivity.class);  
  27.                 //启动指定Activity并等待返回结果,其中0是请求码,用于标识该请求  
  28.                 startActivityForResult(intent,0);  
  29.             }  
  30.         });  
  31.     }  
  32.     @Override  
  33.     public void onActivityResult(int requestCode,int resultCode,Intent intent)  
  34.     {  
  35.         //当requestCode,resultCode同时为0时,也就是处理特定的结果  
  36.         if(requestCode == 0 && resultCode == 0)  
  37.         {  
  38.             //取出Intent里的数据  
  39.             Bundle data = intent.getExtras();  
  40.             //取出Bundle中的数据  
  41.             String resultCity = data.getString("city");  
  42.             //修改city文本框  
  43.             city.setText(resultCity);  
  44.         }  
  45.     }  
  46. }  
点击后出现选择城市的窗口,界面全部是动态生成,没有xml文件

选中后,此窗口关闭,回到第一个窗口,显示所选的城市

选择城市代码窗口如下

[java]  view plain copy print ?
  1. package WangLi.Activity.ActivityForResult;  
  2.   
  3. import android.app.ExpandableListActivity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.Gravity;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.AbsListView;  
  10. import android.widget.BaseExpandableListAdapter;  
  11. import android.widget.ExpandableListAdapter;  
  12. import android.widget.ExpandableListView;  
  13. import android.widget.ExpandableListView.OnChildClickListener;  
  14. import android.widget.ImageView;  
  15. import android.widget.LinearLayout;  
  16. import android.widget.TextView;  
  17.   
  18. public class SelectCityActivity extends ExpandableListActivity {  
  19.      //定义省份数组  
  20.      private String[] provinces = new String[]  
  21.              {"广东","广西","湖南"};  
  22.      private String[][] cities = new String[][]  
  23.      {  
  24.              {"广州","深圳","珠海","中山"},  
  25.              {"桂林","柳州","南宁","北海"},  
  26.              {"长沙","岳阳","衡阳","株洲"}  
  27.      };  
  28.        
  29.      public void onCreate(Bundle saveInstanceState)  
  30.      {  
  31.          super.onCreate(saveInstanceState);  
  32.          ExpandableListAdapter adapter = new BaseExpandableListAdapter()  
  33.          {  
  34.             //获取指定组位置,指定子列表项处的子列表项数据  
  35.             public Object getChild(int groupPosition,int childPosition)  
  36.             {  
  37.                 return cities[groupPosition][childPosition];  
  38.             }  
  39.             public long getChildId(int groupPosition,int childPosition)  
  40.             {  
  41.                 return childPosition;  
  42.             }  
  43.             public int getChildrenCount(int groupPosition)  
  44.             {  
  45.                 return cities[groupPosition].length;  
  46.             }  
  47.             private TextView getTextView()  
  48.             {  
  49.                 AbsListView.LayoutParams lp =   
  50.                         new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,64);  
  51.                 TextView textView = new TextView(SelectCityActivity.this);  
  52.                 textView.setLayoutParams(lp);  
  53.                 textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
  54.                 textView.setPadding(36000);  
  55.                 textView.setTextSize(20);  
  56.                 return textView;  
  57.             }  
  58.             public View getChildView(int groupPosition,int childPosition,boolean isLastChild,  
  59.                     View convertView,ViewGroup parent)  
  60.             {  
  61.                 TextView textView = getTextView();  
  62.                 textView.setText(getChild(groupPosition,childPosition).toString());  
  63.                 return textView;  
  64.             }  
  65.             public Object getGroup(int groupPosition)  
  66.             {  
  67.                 return provinces[groupPosition];  
  68.             }  
  69.             public int getGroupCount()  
  70.             {  
  71.                 return provinces.length;  
  72.             }  
  73.             public long getGroupId(int groupPosition)  
  74.             {  
  75.                 return groupPosition;  
  76.             }  
  77.             public View getGroupView(int groupPosition,boolean isExpanded,  
  78.                     View convertView,ViewGroup parent)  
  79.             {  
  80.                 LinearLayout l1 = new LinearLayout(SelectCityActivity.this);  
  81.                 l1.setOrientation(0);  
  82.                 ImageView logo = new ImageView(SelectCityActivity.this);  
  83.                 l1.addView(logo);  
  84.                 TextView textView = getTextView();  
  85.                 textView.setText(getGroup(groupPosition).toString());  
  86.                 l1.addView(textView);  
  87.                 return l1;  
  88.             }  
  89.             public boolean isChildSelectable(int groupPosition,int childPosition)  
  90.             {  
  91.                 return true;  
  92.             }  
  93.             public boolean hasStableIds()  
  94.             {  
  95.                 return true;  
  96.             }  
  97.          };  
  98.             //设置窗口显示列表  
  99.         setListAdapter(adapter);  
  100.         getExpandableListView().setOnChildClickListener(new OnChildClickListener()  
  101.         {  
  102.             public boolean onChildClick(ExpandableListView parent,View source,  
  103.                 int groupPosition,int childPosition,long id)  
  104.             {  
  105.                 //获取启动该Activity之前的Activity对应的Intent  
  106.                 Intent intent = getIntent();  
  107.                 Bundle data = new Bundle();  
  108.                 data.putString("city", cities[groupPosition][childPosition]);  
  109.                 intent.putExtras(data);  
  110.                 //设置该SelectActivity的结果码,并设置结束之后退回的Activity  
  111.                 SelectCityActivity.this.setResult(0,intent);  
  112.                 //结束SelectActivity  
  113.                 SelectCityActivity.this.finish();  
  114.                 return false;  
  115.             }  
  116.         });  
  117.      }  
  118. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值