Android-Activity-startActivityForResult
之前 Android-Intent意图传递数据,的博客讲解了,一个Activity 跳转 到另外一个Activity 可以把数据带过去
Android还提供了一种方式,一个Activity 跳转 到另外一个Activity 可以把数据传递过去,然后还可以把数据返回过来,就需要startActivityForResult
在MyActivity1中执行startActivityForResult(intent, 请求码)
然后在MyActivity1重写onActivityResult方法,用于接收返回的信息
package liudeli.activity.intent.result; import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText; import java.util.ArrayList;
import java.util.List; import liudeli.activity.R;
import liudeli.activity.intent.MyApplication; public class MyActivity1 extends Activity { private EditText etItemInfo; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my1); etItemInfo = findViewById(R.id.et_item_info);
} public void startMyActivity2(View view) {
// 绑定数据
List<String> list = new ArrayList<>();
for (int i=0; i< 30; i++) {
list.add("我是一个条目 下标是: " + i);
} // 把数据绑定给Application
MyApplication myApplication = (MyApplication) getApplication();
myApplication.list = list; Intent intent = new Intent(this, MyActivity2.class);
startActivityForResult(intent, 500); // 请求码 500
} /**
* 用来接收 startActivityForResult --> Activity ->setResult(200, intent);
* @param requestCode startActivityForResult(intent, 500);
* startActivityForResult(intent, 400);
* startActivityForResult(intent, 300);
* startActivityForResult(intent, 310);
* ......
* 如果没有requestCode请求码,就没法对业务逻辑进行划分处理
* 规范写法是,成对判断: requestCode == 500 && resultCode == 200
*
* @param resultCode setResult(200, intent);
* setResult(210, intent);
* setResult(240, intent);
* setResult(260, intent);
* ......
* 如果没有resultCode结果码,就没法对业务逻辑进行划分处理
* 规范写法是,成对判断: requestCode == 500 && resultCode == 200
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); // 不能用getIntent(),要用data 才能获取到item
String item = data.getStringExtra("item"); /*Toast.makeText(this, "requestCode:" + requestCode +
" ,resultCode:" + resultCode +
" ,item:" + item
, Toast.LENGTH_SHORT).show();*/ new AlertDialog.Builder(MyActivity1.this)
.setMessage("requestCode:" + requestCode +
" ,resultCode:" + resultCode +
" ,item:" + item).setPositiveButton("我知道了", null).show(); etItemInfo.setText(item + ""); if (null != item) {
// 设置光标放在最后
etItemInfo.setSelection(item.length());
} // 实际正规写法应该是这样:
// requestCode和startActivityForResult保持一致
// resultCode和setResult(200) 200 保持一致
// 如果返回了intent 就需要判断 null != data
if (requestCode == 500 && resultCode == 200 && null != data) {
// ... 实际业务逻辑处理
}
}
}
MyActivity1的布局文件 activity_my1.xml
在这布局中,重点讲解了,weight 的使用,和理解
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"> <EditText
android:id="@+id/et_item_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="startMyActivity2"
android:text="启动My2"
android:layout_weight="0"
/> <!--
注意:⚠️ android:layout_weight="0" 默认是0,0代表的意思是:我先放入填充显示
Button layout_weight = "0" 先放入填充显示
EditText 设置比重为1,后放入显示,然后再 有多少空间给我填充,我就填充多少 所以说:多使用 比重 和 相对布局,有利于 屏幕的自适配 layout_weight 涉及到优先放入填充显示
--> </LinearLayout> </RelativeLayout>
MyActivity1的布局文件 activity_my1.xml 的布局预览:
MyActivity2返回数据,就需要用到 setResult(200, intent); + finish();
package liudeli.activity.intent.result; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView; import java.util.List; import liudeli.activity.R;
import liudeli.activity.intent.MyApplication; public class MyActivity2 extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my2); // 取出数据
MyApplication myApplication = (MyApplication) getApplication();
List<String> list = myApplication.list; ListView listView = findViewById(R.id.listview); // 只有一个数据,简单的展示列表,就采用ArrayAdapter
final ArrayAdapter arrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
android.R.id.text1,
list);
listView.setAdapter(arrayAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 只返回结果码
// setResult(200); String item = (String) arrayAdapter.getItem(position); Intent intent = new Intent();
intent.putExtra("item", item); // 返回结果码,还返回数据,数据用Intent传输
setResult(200, intent);
// 一定要finish(); 否则不结束当前MyActivity1,无法返回给MyActivity1
finish();
}
});
}
}
MyActivity2的布局文件 activity_my2.xml,主要就是一个ListView用来展示列表数据的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView> </RelativeLayout>
效果:

Android-Activity-startActivityForResult的更多相关文章
- Android Activity的加载模式和onActivityResult方法之间的冲突
前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...
- Android之startActivityForResult的使用
在Android中startActivityForResult主要作用就是: A-Activity需要在B-Activtiy中执行一些数据操作,而B-Activity又要将,执行操作数据的结果返回给A ...
- Android activity的回传数据
package com.example.myact3; import android.content.Intent; import android.os.Bundle; import android. ...
- 【转】Android Activity和Intent机制学习笔记----不错
原文网址:http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html Activity Android中,Activity是所有程序的根 ...
- Android Activity和Intent机制学习笔记
转自 http://www.cnblogs.com/feisky: Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具 ...
- 【Android】详解Android Activity
目录结构: contents structure [+] 创建Activity 如何创建Activity 如何创建快捷图标 如何设置应用程序的名称.图标与Activity的名称.图标不相同 Activ ...
- Android Activity启动流程源码全解析(1)
前言 Activity是Android四大组件的老大,我们对它的生命周期方法调用顺序都烂熟于心了,可是这些生命周期方法到底是怎么调用的呢?在启动它的时候会用到startActivty这个方法,但是这个 ...
- Android Activity标签属性
Android Activity标签属性 Activity 是 Android 系统四大应用组件之一,用户可与 Activity 提供的屏幕进行交互,以执行拨打电话.拍摄照片.发送电子邮件等操作开发者 ...
- [转]Android Activity的加载模式和onActivityResult方法之间的冲突
前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...
- 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突
今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为si ...
随机推荐
- <转>Linux 环境进程间通信(六)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part6/ 一个套接口可以看作是进程间通信的端点(endpoint),每个套接口的名字都是唯一的(唯 ...
- Java中异常体系
Java中的异常体系 Throwable,是一个类,表示可抛出的,它是所有的异常都继承的类. Throwable的子类,又分为两种,一种是Error,另一种是Exception. Error一般不是应 ...
- Superset安装
Superset version 1.8.5 # Install superset pip install cairocffi pip install superset yum ...
- go unit test-monkey
package main import ( "fmt" "github.com/bouk/monkey" "os" "os/exe ...
- 让你的网站用上https
一般申请了SSL证书,会有安装教程教你一步步配置.这里照搬官方教程. 下载得到的 www.domain.com.zip 文件,解压获得3个文件夹,分别是Apache.IIS.Nginx 服务器的证书文 ...
- c++ 备忘录模式(memento)
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态[DP].举个简单的例子,我们玩游戏时都会保存进度,所保存的进度以文件的 ...
- SpringBoot与Shiro的整合(单体式项目)
1.包结构 2.jar包,配置文件,类 2.1pom.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> ...
- VMware安装完后,没有虚拟网卡
1 问题描述: 1.1 windows10首次安装VMware,或者非首次安装VMware时,安装后,没有出现如下图所示的虚拟网卡: 1.2 Xshell或者SecureCRT 或者editplus等 ...
- code1173 最优贸易
先正向从1点出发SPFA,获得min[i],就是到达i点能最低购买到的价格,(起始点到i的路上经过的最小值) 然后反向(将图反向),从n点开始SPFA,获得max[i],就是从i点到终点能够卖出的最大 ...
- 清北学堂 day6 兔子
---恢复内容开始--- [问题描述] 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与 ...