1.开启界面获取返回值

(1)采用一种特殊的方式开启Activity:

              startActivityForResult(intent , 0);

(2)在被开启的Activity里面设置数据:

              Intent data =  new Intent();

              data.putExtra("content", content);

              setResult(0, data);

备注:

public final void setResult(int resultCode,Intent data):它是Activity的方法,用于返回数据给上一个Activity的(跳转之前的Activity)

(3)记得关闭新开启的界面:

               finish();

(4)在第一个Activity里面重写一个方法:

                    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                   //data 就是返回的Intent数据,里面包含有数据
                    }

(5)有两个参数 请求码 requestCode  resultCode (使用时候任选其中之一就行)

              区别请求 或者 结果的来源

2.短信助手案例的优化:(使用请求码)

上一讲的短信助手的程序只是选择了短信的内容,显示生活中我们还必须有选择联系电话,这样我们才能发送数据。

(1)我们在activity_main.xml中添加选择联系电话的UI,如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.himi.Smshelper.MainActivity" > <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="select_contacts"
android:text="浏览选择联系人" /> <EditText
android:id="@+id/et_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:singleLine="true" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="select_Sms"
android:text="浏览选择短信" /> <EditText
android:id="@+id/et_Sms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:lines="6" /> </LinearLayout>

布局效果如下:

(2)在MainActivity,修改代码如下:

 package com.himi.Smshelper;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText; public class MainActivity extends Activity {
private EditText et_Sms;
private EditText et_phone;
public static int GET_SMS = 1;//获取短信的内容请求码
public static int GET_PHONE = 2;//获取电话号码请求码 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_Sms = (EditText) findViewById(R.id.et_Sms);
et_phone = (EditText) findViewById(R.id.et_phone); }
/**
* 选择短信内容
* @param view
*/
public void select_Sms(View view) {
Intent intent = new Intent(this, SmsActivity.class);
// 直接打开新的界面
// startActivity(intent);
startActivityForResult(intent, GET_SMS); }
/**
* 选择联系人
* @param view
*/
public void select_contacts(View view) {
Intent intent = new Intent(this, ContactActivity.class);
// 直接打开新的界面
// startActivity(intent);
startActivityForResult(intent, GET_PHONE);
} /**
*返回数据 当我们开启的Activity关闭的时候(这里我们开启的就是SmsActivity),SmsActivity关闭之后调用这个方法
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == GET_SMS) {
if (data != null) {
String context = data.getStringExtra("context");
et_Sms.setText(context);
}
}else {
String context = data.getStringExtra("phone");
et_phone.setText(context);
}
super.onActivityResult(requestCode, resultCode, data);
} }

这里的startActivityForResult(Intent intent, int requestCode)  与 onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:intent是意图(这里就是打开相应的Activity);

第二个参数:requestCode是请求码;

这里定义两个请求码分别为:GET_SMS 与 GET_PHONE 

GET_SMS:表示是MainActivity切换到SmsActivity的请求码;

GET_PHONE :表示是MainActivity切换到ContactActivity的请求码;

(3)添加”浏览选择联系人" ,跳转的界面ContactActivity,如下:

 package com.himi.Smshelper;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter; public class ContactActivity extends Activity {
private ListView lv; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
lv = (ListView) findViewById(R.id.lv);
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
for (int i = 0; i < 10; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("name", "刘德华"+i);
map.put("phone", "1000" + i);
data.add(map);
}
lv.setAdapter(new SimpleAdapter(ContactActivity.this, data, R.layout.item_contacts,
new String[] {"name", "phone"}, new int[] {R.id.tv_name,R.id.tv_phone})); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String phone = "1000"+position;
Intent data = new Intent();
data.putExtra("phone", phone);
setResult(0, data);
System.out.println("你点击了第"+position+"选项");
finish();
} });
} }

添加的”选择联系人"的布局文件,activity_contacts.xml如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView> </LinearLayout>

当然上面布局文件中定义了Listview,Listview设置适配器的时候也必然需要设置Listview各个子项item的样式,item_contacts.xml如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView> </LinearLayout>

相应的SmsActivity如下:

 package com.himi.Smshelper;

 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class SmsActivity extends Activity {
private ListView lv;
private String[] sms = {
"七夕节到了,送你一碗长寿面,祝你们的爱情像长寿面一样长长久久,永远不分离。送你一份酸辣汤,让你们生活像酸辣汤一样有滋有味。真诚的祝福你七夕快乐。",
"雪花的美丽,飘舞着心情的惦记,圣诞节最思念是你,给你我祝福的深意,把幸福累积,祈祷着祝愿的真挚,圣诞节祝你万事如意!",
"三年光阴,匆匆而过,如梦的年纪,弥漫着串串欢声笑语,不要挥手叹息,觉得繁花尽去,鼓足勇气,不要忘了互递惊喜的消息。",
"亲爱的织女:七夕情人节将至,愿我们高举中国特色痴情主义伟大旗帜,发扬鹊桥相会优良传统,保持二人世界爱情在线,携手开创爱情新局面。牛郎敬上。" };
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
lv = (ListView) findViewById(R.id.iv);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, sms)); //给listview的条目设置点击事件
lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view,
int position, long id) { String context = sms[position];
Intent intent = new Intent();
intent.putExtra("context", context);
setResult(0, intent);
finish();
} }); } }

 public final void setResult(int resultCode, Intent data):

第一个参数是:结果码,这里我们是使用了请求码,所以SmsActivity和ContactsAcitivity的反馈到MainActicity的结果码,我们这里就不用设置,这里设为0

第二个参数是:SmsActivity和ContactsAcitivity 反馈给MainActivity的intent数据

其余部分代码不用修改

3.当然代码也可以使用结果码优化,这里就不演示了。

Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)的更多相关文章

  1. Android(java)学习笔记222:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)

    1.开启界面获取返回值 (1)采用一种特殊的方式开启Activity:               startActivityForResult(intent , 0): (2)在被开启的Activi ...

  2. Android:日常学习笔记(8)———开发微信聊天界面

    Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.

  3. Android(java)学习笔记221:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)

    1.首先我们看看下面这个需求: 这里我们在A界面上,点击这个按钮"选择要发送的短信",开启B界面上获取网络上各种短信祝福语,然后B界面会把这些网络祝福语短信发送给A界面到" ...

  4. Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)

    1.首先我们看看下面这个需求: 这里我们在A界面上,点击这个按钮"选择要发送的短信",开启B界面上获取网络上各种短信祝福语,然后B界面会把这些网络祝福语短信发送给A界面到" ...

  5. Java学习笔记(二十二):打包程序

    加入一个程序测试完毕,我们就可以将它打包,就可以放到服务器上运行了 找到左下角的终端 点击 输入命令: mvnw clean package -DskipTests=true clean:清除以前生成 ...

  6. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  7. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  8. Android:日常学习笔记(8)———探究UI开发(3)

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

  9. Android:日常学习笔记(7)———探究UI开发(1)

    Android:日常学习笔记(7)———探究UI开发(1) 常用控件的使用方法 TextView 说明:TextView是安卓中最为简单的一个控件,常用来在界面上显示一段文本信息. 代码: <T ...

随机推荐

  1. Windows Mysql启动出现1069错误 “由于登录失败而无法启动服务” 的处理方法

    问题现象 windows下mysql服务无法启动,报1069错误. 问题原因 如果Mysql启动用户的密码或者权限错误,会导致Windows服务器Mysql启动时出现"由于登录失败而无法启动 ...

  2. Objective-C基础知识

    内联函数 “内联函数”是一个很老的概念,在其他语言譬如C++语言中也出现了.所谓“内联函数”指的是“有函数的结构,但不具备函数的性质,类似于宏替换功能的代码块”. 在实际应用中,常常把规模较小.逻辑较 ...

  3. Css之cursor 属性

    url        需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏 ...

  4. rtmplib rtmp协议过程分析

    转自:http://chenzhenianqing.cn/articles/1009.html 写的很好,收藏如下,向作者致敬! 没事碰到了librtmp库,这个库是ffmpeg的依赖库,用来接收,发 ...

  5. Hackerrank: Week of Code 36

    Cut a Strip 题目简述:给定$n \times m$的矩阵$a[][]$,要求选择一个$x \times 1(1 \leq x \leq k)$的(连续)子矩阵并清零后,找到最大和的(连续) ...

  6. E20180404-hm

    reject vt. 拒绝; 排斥; 抛弃,扔掉; 吐出或呕吐; conditioner  n. 调节器,调节装置 fabric n. 织物; 布; 构造; (建筑物的) 结构(如墙.地面.屋顶):质 ...

  7. Bid和Ask

    一直很懵到底哪个是哪个,记吧,很快就又懵了.网上又坑,每一个解释清楚的.这次搞明白了记下来. 当然,这么逗比的取名法我也是醉了.直接加点东西,UserBuy,UserSell,BankBuy,Bank ...

  8. Swift里计数相关的小细节

    Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug. 在讲主题前,先说个小细节. Swift里非常严密的定义了一大堆字符 ...

  9. C++笔试题库之编程、问答题 300~305道

    301. 以下代码有什么问题? cout << (true?1:”1″) << endl; 答:三元表达式“?:”问号后面的两个操作数必须为同一类型. 302.以下代码能够编译 ...

  10. BestCoder Round #73 (div.2)1002/hdoj5631

    题意: 给出一张 nnn 个点 n+1n+1n+1 条边的无向图,你可以选择一些边(至少一条)删除. 分析: 一张n个点图,至少n-1条边才能保证联通 所以可以知道每次可以删去1条边或者两条边 一开始 ...