用 startActivityForResult 方法启动 Activity 的简单使用
2015-11-27 15:22
330 查看
Activity 启动 Activity 的方法有两种:
1. startActivity(Intent intent);
2. startActivityForResult(Intent intent, int requestCode);
第二个启动方法以指定的请求码(requestCode)启动 Activity,请求码由用户自己设置,用于标识请求来源;在以第2中方法中启动的 Activity 中以 finishActivity(intrequestCode) 方法来结束。
要获取被启动的 Activity 所返回的结果:
1.当前 Activity 需要重写 onActivityResult(int requestCode, int resultCode, Intent intent);resultCode 代表 Activity 所返回的结果码,该结果码由用户设置;
2.需要在被启动的 Activity 中调用 setResult() 方法来处理结果。
下面是一个以startActivityForResult(Intent intent, int requestCode)方法启动的 Activity 的示例,效果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/20e2d2443d1e32ab1b2aedbb746b1a51)
layout_main.xml 布局文件:
MainActivity.java 代码:
被启动的 SelectCityActivity.java 代码:
此外还需要在 AndroidManifest.xml 文件中为 SelectCityActivity 注册:
1. startActivity(Intent intent);
2. startActivityForResult(Intent intent, int requestCode);
第二个启动方法以指定的请求码(requestCode)启动 Activity,请求码由用户自己设置,用于标识请求来源;在以第2中方法中启动的 Activity 中以 finishActivity(intrequestCode) 方法来结束。
要获取被启动的 Activity 所返回的结果:
1.当前 Activity 需要重写 onActivityResult(int requestCode, int resultCode, Intent intent);resultCode 代表 Activity 所返回的结果码,该结果码由用户设置;
2.需要在被启动的 Activity 中调用 setResult() 方法来处理结果。
下面是一个以startActivityForResult(Intent intent, int requestCode)方法启动的 Activity 的示例,效果如下:
layout_main.xml 布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text1"/> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/bt"/> </RelativeLayout>
MainActivity.java 代码:
package com.android.scxh.activityforresult; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { Button bn; EditText city; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bn = (Button)findViewById(R.id.bt); city = (EditText)findViewById(R.id.edit1); bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SelectCityActivity.class); // 请求码为 0 startActivityForResult(intent, 0); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 只有当 requestCode 和 resultCode 同时为 0 时,才处理结果 if (requestCode == 0 && resultCode == 0) { Bundle data1 = data.getExtras(); String resultCity = data1.getString("city"); city.setText(resultCity); } } }
被启动的 SelectCityActivity.java 代码:
package com.android.scxh.activityforresult; 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.ImageView; 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 adapter = new BaseExpandableListAdapter() { @Override public int getGroupCount() { return provinces.length; } @Override public int getChildrenCount(int groupPosition) { return cities[groupPosition].length; } // 获取指定组位置处的组的数据 @Override public Object getGroup(int groupPosition) { return provinces[groupPosition]; } // 获取指定组 位置,指定子列表处的子列表项数据 @Override public Object getChild(int groupPosition, int childPosition) { return cities[groupPosition][childPosition]; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } 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 boolean hasStableIds() { return true; } // 决定每个组选项的外观 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { LinearLayout ll = new LinearLayout(SelectCityActivity.this); ll.setOrientation(LinearLayout.HORIZONTAL); ImageView logo = new ImageView(SelectCityActivity.this); ll.addView(logo); TextView textView = getTextView(); textView.setText(getGroup(groupPosition).toString()); ll.addView(textView); return ll; } // 决定每个子选项的外观 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = getTextView(); textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }; setListAdapter(adapter); getExpandableListView().setOnChildClickListener( new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // 获取 MainActivity 对应的 Intent Intent intent = getIntent(); intent.putExtra("city", cities[groupPosition][childPosition]); // 设置该 SelectCityActivity 的结束码,设置结束之后返回 MainActivity SelectCityActivity.this.setResult(0, intent); // 结束 SelectCityActivity SelectCityActivity.this.finish(); return false; } }); } }
此外还需要在 AndroidManifest.xml 文件中为 SelectCityActivity 注册:
<activity android:name=".SelectCityActivity"/>
相关文章推荐
- static_cast与dynamic_cast转换
- C# string.Format谨慎使用
- linux驱动程序调试常用方法
- JavaSript模块规范 - AMD规范与CMD规范介绍
- Ios高级绘图之路径剪切和蒙版
- iOS轮询请求并在图表中动态显示
- 开发工具准备
- 资源文件包 Bundle
- C#时间戳的获取与转换方法
- Sql 语句添加字段、修改字段类型、默认值语法
- CGContext
- ui-router
- Android动画小结
- 关于maven管理下的spring工程路径的问题
- 创建 Windows 10 介质
- C++primer plus第六版课后编程练习答案7.1
- ASP网站维护1
- ipsec/racoon on ubuntu14.04
- 湖北互联网能赶上北上广吗?
- c#收发数据给USB HID