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 ...
随机推荐
- h3c 云计算管理平台
- jquery制作滚动条到一定位置触发
$(function(){ var nav=$(".nav"); //得到导航对象 var win=$(window); //得到窗口对象 var sc=$(document);/ ...
- Matplotlib 库 : 绘图和可视化
一.Matplotlib基础知识 1.1Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y ...
- Spring Boot实践——三种拦截器的创建
引用:https://blog.csdn.net/hongxingxiaonan/article/details/48090075 Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可 ...
- Oracle在linux中相关设置操作
set linesize 300; -- 设置行长度 set pagesize 300; set long 100000; -- 设置输出长度select dbms_metadata.get_ddl ...
- 深入理解Java线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ...
- 自动补齐flexselect+级联下拉框案例
在开发web应用时,经常遇到类似省市区级联下拉框操作,即选中省份自动级联加载该省份所有的市,选中市自动级联加载该市所有的区:假设省市区的数据量很大,此时用户想选中某市,因而要从上往下查找,可能半天都找 ...
- 关于Redis的常识
原文出自:http://blog.jobbole.com/44476/ 版本:V3.0.2 2013-7-13 (江南白衣版权所有,转载请保留出处) 1. Overview 1.1 资料 <Th ...
- cdoj914-方老师分身 I 【dijkstra】
http://acm.uestc.edu.cn/#/problem/show/914 方老师分身 I Time Limit: 3000/1000MS (Java/Others) Memory ...
- 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
这道题对于一类题都有一个通用思路:反向递减序列即为正向字典序. 对于逆向思维的题还要多做才能培养这种对于逆向思维的感觉. 想到这种方法之后,就很简单了. 因为n×m不会炸,所以反向LIS叠一个贪心就能 ...