启动其他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】
分享到:
相关推荐
下面将详细介绍如何在Android中实现父Activity获取子Activity返回的信息。 首先,我们创建一个子Activity。在这个子Activity中,用户可能会进行一些交互,例如选择数据、填写表单等。完成这些操作后,子Activity...
### 一、Intent启动Activity #### 1. 显式启动 显式启动是通过Intent明确指定要启动的Activity的类名。创建Intent时,你需要在构造函数中传入当前Activity(`this`)和目标Activity的Class对象,如下所示: ```...
在Android应用开发中,启动另一个Activity并返回结果是常见的操作,通常用于实现用户交互或数据交换。例如,从一个Activity启动相机应用拍摄照片后,我们需要获取拍摄的照片并显示在当前Activity上。这个过程就涉及...
例如,如果你想在Activity A中启动Activity B,并传递一些参数,可以这样做: ```java Intent intent = new Intent(A.this, B.class); intent.putExtra("key", "value"); startActivity(intent); ``` 在这里,...
当我们需要在一个Activity启动另一个Activity并期待得到一些结果时,就需要使用到`startActivityForResult()`方法,这就是“Android review 打开activity返回结果”这个话题的核心。下面将详细介绍这个过程及其相关...
在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递数据类似,也可以采用前面4种方法,但是一般建议采用Intent对象的方式来返回数据,使用这种方式返回数据,需要...
singleTask模式会为Activity创建一个新的任务栈,每次启动Activity,如果任务栈中不存在该Activity,就会创建一个新实例并作为栈底。如果栈中已存在该Activity实例,那么所有在其之上的Activity都将被销毁,当前...
"Android一次启动多个Activity (TaskStackBuilder)"这个话题涉及到Android的Task和Back Stack管理,以及如何利用TaskStackBuilder实现从通知启动多级Activity并保持正确的返回流程。下面将详细阐述这一知识点。 ...
Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence。 standard是最常见的activity启动方式,也是默认的启动的方式。当启动一个activity的时候他将进入返回栈的栈顶。系统不会管栈内是否...
在Android应用开发中,Activity是用户界面的基本单元,它负责展示屏幕上的内容并处理用户交互。Activity的启动模式是决定其生命周期和实例管理的关键因素。本项目提供了对Android Activity四种启动模式的实例演示,...
例如,如果我们想让Activity不在默认任务栈中启动,可以设置一个独立的taskAffinity值,并在启动Activity时使用FLAG_ACTIVITY_NEW_TASK标志。这样,当Activity启动时,系统会在新的任务栈中创建一个新实例,这个新...
在这种模式下,每次启动Activity都会创建一个新的实例,无论当前栈中是否存在该Activity的实例。这意味着,如果你连续点击同一个标准模式的Activity,系统会在回退栈中创建多个相同实例,用户可以按返回键逐个返回。...
"启动带有返回值的Activity"是Android编程中的一个重要概念,它涉及到如何在启动一个Activity后获取其执行结果并返回到调用者Activity。这个过程通常通过Intent、startActivityForResult()方法和onActivityResult()...
在我们的例子中,当用户点击按钮启动Activity2时,Activity1会进入这个状态。但是,Activity仍然是运行状态并且保留着所有状态和注册的回调。 5. **onStop()**: 当Activity不再对用户可见时调用。这通常发生在新的...
在Android开发中,有时我们需要创建一个特殊的Activity,它以对话框的形式展示,而不是全屏填充。这样的Activity通常用于提供用户一些简短的信息或者需要用户进行简单的交互操作,比如设置、警告或者确认对话。这种...
2. 启动带有返回结果的Activity:若需从目标Activity返回结果,可以在启动时添加`startActivityForResult()`,并在目标Activity中使用`setResult()`设置返回值,最后调用`finish()`结束Activity。 四、关闭Activity...
在这个回调中,你可以通过请求码来判断是哪个子Activity返回了结果,并通过`data`参数获取返回的数据。 4. **设置返回结果**: 在子Activity中,你可以使用`setResult()`方法来设置返回的结果。这个方法接受两个...
总结来说,启动Activity并返回结果是Android应用中常见的功能,通过`startActivityForResult()`启动新Activity,使用`setResult()`设置返回数据,最后在启动Activity的`onActivityResult()`中接收并处理返回的结果。...
总之,Intent是Android中实现组件间通信的关键,通过它可以灵活地启动Activity并传递数据。理解和熟练使用Intent对于Android开发者来说至关重要。在实际项目中,根据需求调整Intent的构造和使用方式,可以实现丰富的...
Intent是Android中启动Activity的主要手段,它包含了启动另一个组件(如Activity或Service)所需的所有信息。当我们想从当前Activity返回到之前的特定Activity,我们可以使用Intent来实现。例如,我们可以通过设置...