Activity提供startActivityForResult方法启动另一个Activity,该方法用于启动指定Activity,并获取指定Activity返回的结果.
为了获取被启动的Activity所返回的结果,可从两方面着手:
(1)当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),当被启动的Activity返回结果时,该方法将会被触发,其中requestCode代表请求码,而resultCode代表Activity返回的结果码,注:结果码是自行设定的.
(2)被启动的Activity需要调用setResult()方法设置处理结果
实例Demo中包含两个Activity,第一个Activity布局只是包含一个按钮和一个文本框,如下布局和java代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择您所在城市" /> <EditText android:id="@+id/city" android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="false" android:cursorVisible="false" /> </LinearLayout>java代码如下:
public class MainActivity extends AppCompatActivity { Button bn; EditText city; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取界面上的组件 bn = (Button) findViewById(R.id.bn); city = (EditText) findViewById(R.id.city); //为按钮绑定事件监听 bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //创建需要对应于目标Activity的Intent Intent intent = new Intent(MainActivity.this,SelectCityActivity.class); //启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求 startActivityForResult(intent,0); } }); } //重写方法,该方法以回调的方式来获取指定Activity返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { //当requestCode,resultCode同时为0时,也就是处理特定的结果 if(requestCode == 0 && resultCode == 0) { //取出Intent里的Extras数据 Bundle data = intent.getExtras(); //取出Bundle中的数据 String resultCity = data.getString("city"); //修改city文本框的内容 city.setText(resultCity); } } }此时第一个Activity已完成,效果图如底部展示,就只是一个按钮和一个文本框,当点击按钮时,页面会跳转到SelectCityActivity,当我们点击SelectCityActivity中的页面条目时,页面会跳转回MainActivity,并把点击的条目显示到文本框中.
SelectCityActivity的界面java代码如下,此处SelectCityActivity并不需要布局搭建,代码如下:
public class SelectCityActivity extends ExpandableListActivity { // 定义省份数组 private String[] provinces = new String[] { "广东", "广西", "湖南"}; private String[][] cities = new String[][] { { "广州", "深圳", "珠海", "中山" }, { "桂林", "柳州", "南宁", "北海" }, { "长沙", "岳阳" , "衡阳" , "株洲" } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ExpandableListAdapter adapter = new BaseExpandableListAdapter() { // 获取指定组位置、指定子列表项处的子列表项数据 @Override public Object getChild(int groupPosition, int childPosition) { return cities[groupPosition][childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public int getChildrenCount(int groupPosition) { return cities[groupPosition].length; } 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(); textView.setText(getChild(groupPosition, childPosition) .toString()); return textView; } // 获取指定组位置处的组数据 @Override public Object getGroup(int groupPosition) { return provinces[groupPosition]; } @Override public int getGroupCount() { return provinces.length; } @Override public long getGroupId(int groupPosition) { return groupPosition; } // 该方法决定每个组选项的外观 @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 boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean hasStableIds() { return true; } }; // 设置该窗口显示列表 setListAdapter(adapter); getExpandableListView().setOnChildClickListener( new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View source, int groupPosition, int childPosition, long id) { // 获取启动该Activity之前的Activity对应的Intent Intent intent = getIntent(); intent.putExtra("city", cities[groupPosition][childPosition]); // 设置该SelectCityActivity的结果码,并设置结束之后退回的Activity SelectCityActivity.this.setResult(0, intent); // 结束SelectCityActivity。 SelectCityActivity.this.finish(); return false; } }); } }到此为止,该Demo已完成,已经能够进行页面间的跳转并拿到返回结果.
效果图如下: