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 ...
随机推荐
- js函数——倒计时模块和无缝滚动
倒计时 效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- CentOS7.6安装Redis
官网下载地址:https://redis.io/download 第一步:软件下载安装 进行安装目录:cd /opt/software (如果目录不存在,请先创建目录) 下载二进制包:wget htt ...
- Python环境搭建之OpenGL
以下内容为我python OpenGl 环境搭建历程: win7 64位操作系统,python3.5.3 ,无其他相关. 直接cmd或PowerShell输入以下命令: pip install PyO ...
- C#基础编程试题 4
一.题目 使用递归算法和二维数组,根据下面条件排序上面的对象. 五个人 张三 李四 王五 猴六 麻七 五间房子 黄房子 蓝房子 红房子 绿房子 橙房子 五只宠物 蜗牛 小狗 小猫 小白兔 小金鱼 五个 ...
- CentOS 安装python3.5
1.刚开始centos可能会缺少gcc等组件,先安装组件 yum groupinstall "Development Tools" 2.下载源码,解压后进入目录 #下载地址http ...
- eureka快速剔除失效服务
eureka服务端配置 #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓 ...
- VS Code 在新Tabs打开文件
添加如下设置即可 "workbench.editor.enablePreview": false
- 前端开发之CSS篇二
主要内容: 一.CSS的继承性和层叠性 二.盒模型 三.padding属性 四.border属性 五.margin属性 六.标准文档流 七.行内元素和块状元素转换 1️⃣ CSS的继承性和层叠性 1 ...
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- 【poj1743】Musical Theme 【后缀自动机】
题意 给出一个n个数字的序列,找出相同变化趋势且不重叠的两个最长子串. 分析 这个题以前应该用后缀数组+二分做过.学了后缀自动机后可以用后缀自动机搞一下. 先差分,然后把查分后的数组建SAM.然后对于 ...