博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中启动其他Activity并返回结果
阅读量:4117 次
发布时间:2019-05-25

本文共 6734 字,大约阅读时间需要 22 分钟。

启动其他Activity的一种常用方式就是StartActivity(),但有时候我们期望获取指定Activity返回的结果。这时,就需要使用startActivityForResult()方法,为了获取被启动的 Activity所返回的结果,当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),其中requestCode代表请求码,resultCode代表返回的结果码,它们都是开发者根据业务自行设定的。这样就可以通过请求码和结果码来判断请求是由谁发出的,结果是由谁返回的。下面通过一个实例来演示:

第一个Activity:

import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText;    public class MainActivity extends Activity {     Button btn;     EditText city;        @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         city = (EditText) findViewById(R.id.activity_main_et);         btn = (Button) findViewById(R.id.activity_main_btn);         btn.setOnClickListener(new OnClickListener() {                @Override             public void onClick(View v) {                 // 创建需要对应于目标Activity的Intent                 Intent intent = new Intent(MainActivity.this,                         SelectCityActivity.class);                 // 启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求                 startActivityForResult(intent, 0);             }         });     }        @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         if (requestCode == 0 && resultCode == 0) {             // 取出Intent里的数据             String resultCity = data.getStringExtra("city");             // 修改city文本框的内容             city.setText(resultCity);         }        } }
第二个Activity:

import android.app.ExpandableListActivity; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.LinearLayout; import android.widget.TextView;    public class SelectCityActivity extends ExpandableListActivity {     // 定义省份数组     private String[] provinces = new String[] { "广东", "广西", "湖南", "四川" };     // 定义各省份的城市数组     private String[][] cities = new String[][] { { "广州", "深圳", "珠海", "中山" },             { "桂林", "柳州", "南宁", "北海" }, { "长沙", "岳阳", "衡阳", "株洲" },             { "成都", "绵阳", "广安", "雅安" }, };        @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         // 创建一个可展开的列表组件ExpandableListAdapter对象         ExpandableListAdapter adapter = new BaseExpandableListAdapter() {             @Override             public boolean isChildSelectable(int groupPosition,                     int childPosition) {                    return true;             }                @Override             public boolean hasStableIds() {                    return true;             }                // 构建每个父列表组件             @Override             public View getGroupView(int groupPosition, boolean isExpanded,                     View convertView, ViewGroup parent) {                 // 创建一个LinearLayout对象                 LinearLayout ll = new LinearLayout(SelectCityActivity.this);                 ll.setOrientation(0);                 TextView textView = getTextView();                 // 根据groupPosition取provinces对应文本作为textView显示的文本内容                 textView.setText(getGroup(groupPosition).toString());                 ll.addView(textView);                 return ll;             }                @Override             public long getGroupId(int groupPosition) {                 return groupPosition;             }                @Override             public int getGroupCount() {                    return provinces.length;             }                @Override             public Object getGroup(int groupPosition) {                    return provinces[groupPosition];             }                @Override             public int getChildrenCount(int groupPosition) {                    return cities[groupPosition].length;             }                /**             * 在MainActivity里创建TextView组件             *              * @return TextView             */             private TextView getTextView() {                 AbsListView.LayoutParams lp = new AbsListView.LayoutParams(                         ViewGroup.LayoutParams.MATCH_PARENT, 64);                 TextView textView = new TextView(SelectCityActivity.this);                 textView.setLayoutParams(lp);                 textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);                 textView.setPadding(36, 0, 0, 0);                 textView.setTextSize(20);                 return textView;             }                // 构建子列表的数据             @Override             public View getChildView(int groupPosition, int childPosition,                     boolean isLastChild, View convertView, ViewGroup parent) {                 TextView textView = getTextView();                 // 根据groupPosition和childPosition取cities中对应文本作为textView显示的内容                 textView.setText(getChild(groupPosition, childPosition)                         .toString());                 return textView;             }                @Override             public long getChildId(int groupPosition, int childPosition) {                    return childPosition;             }                @Override             public Object getChild(int groupPosition, int childPosition) {                    return cities[groupPosition][childPosition];             }         };         setListAdapter(adapter);         // 为各个子列表绑定事件监听器         this.getExpandableListView().setOnChildClickListener(                 new OnChildClickListener() {                        @Override                     public boolean onChildClick(ExpandableListView parent,                             View v, int groupPosition, int childPosition,                             long id) {                         Intent intent = getIntent();                         Bundle data = new Bundle();                         data.putString("city",                                 cities[groupPosition][childPosition]);                         intent.putExtras(data);                         // 设置该SelectCityActivity结果码,并设置结束之后退回的Activity                         SelectCityActivity.this.setResult(0, intent);                         // 结束SelectCityActivity                         SelectCityActivity.this.finish();                         return false;                     }                 });     }    }

转自【http://www.open-open.com/lib/view/open1409210540619.html】

转载地址:http://rsjpi.baihongyu.com/

你可能感兴趣的文章
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>
pytorch(6)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>