博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)...
阅读量:5282 次
发布时间:2019-06-14

本文共 6817 字,大约阅读时间需要 22 分钟。

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,如下:

1 
7 8
13 14
20 21
26 27
33 34

布局效果如下:

 

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

1 package com.himi.Smshelper; 2  3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.EditText; 8  9 public class MainActivity extends Activity {10     private EditText et_Sms;11     private EditText et_phone;12     public static int GET_SMS = 1;//获取短信的内容请求码13     public static int GET_PHONE = 2;//获取电话号码请求码14 15     @Override16     protected void onCreate(Bundle savedInstanceState) {17         super.onCreate(savedInstanceState);18         setContentView(R.layout.activity_main);19         et_Sms = (EditText) findViewById(R.id.et_Sms);20         et_phone = (EditText) findViewById(R.id.et_phone);21 22     }23     /**24      * 选择短信内容25      * @param view26      */27     public void select_Sms(View view) {28         Intent intent = new Intent(this, SmsActivity.class);29         // 直接打开新的界面30         // startActivity(intent);31         startActivityForResult(intent, GET_SMS);32 33     }34     /**35      * 选择联系人36      * @param view37      */38     public void select_contacts(View view) {39         Intent intent = new Intent(this, ContactActivity.class);40         // 直接打开新的界面41         // startActivity(intent);42         startActivityForResult(intent, GET_PHONE);43     }44     45     /**46      *返回数据  当我们开启的Activity关闭的时候(这里我们开启的就是SmsActivity),SmsActivity关闭之后调用这个方法47      */48     @Override49     protected void onActivityResult(int requestCode, int resultCode, Intent data) {50         51         if (requestCode == GET_SMS) {52             if (data != null) {53                 String context = data.getStringExtra("context");54                 et_Sms.setText(context);55             }56         }else {57             String context = data.getStringExtra("phone");58             et_phone.setText(context);59         }60         super.onActivityResult(requestCode, resultCode, data);61     }62     63 }

这里的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,如下:

1 package com.himi.Smshelper; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7  8 import android.app.Activity; 9 import android.content.Intent;10 import android.os.Bundle;11 import android.view.View;12 import android.widget.AdapterView;13 import android.widget.AdapterView.OnItemClickListener;14 import android.widget.ListView;15 import android.widget.SimpleAdapter;16 17 public class ContactActivity extends Activity {18     private ListView lv;19 20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         // TODO 自动生成的方法存根23         super.onCreate(savedInstanceState);24         setContentView(R.layout.activity_contacts);25         lv = (ListView) findViewById(R.id.lv);26         List
> data = new ArrayList
>();27 for (int i = 0; i < 10; i++) {28 Map
map = new HashMap
();29 map.put("name", "刘德华"+i);30 map.put("phone", "1000" + i);31 data.add(map);32 }33 lv.setAdapter(new SimpleAdapter(ContactActivity.this, data, R.layout.item_contacts,34 new String[] {"name", "phone"}, new int[] {R.id.tv_name,R.id.tv_phone}));35 36 lv.setOnItemClickListener(new OnItemClickListener() {37 38 public void onItemClick(AdapterView
parent, View view,39 int position, long id) {40 String phone = "1000"+position;41 Intent data = new Intent();42 data.putExtra("phone", phone);43 setResult(0, data);44 System.out.println("你点击了第"+position+"选项");45 finish();46 }47 48 });49 }50 51 }

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

1 
2
6 7
11
12 13

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

1 
2
6 7
11
12 13

 

相应的SmsActivity如下:

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

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

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

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

 

其余部分代码不用修改

 

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

转载于:https://www.cnblogs.com/hebao0514/p/4797527.html

你可能感兴趣的文章
类和结构
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
SWIFT国际资金清算系统
查看>>
站立会议第四天
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>
UVa 11059 最大乘积
查看>>
数组分割问题求两个子数组的和差值的小
查看>>