Android(java)学习笔记222:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)
2015-09-10 12:56
1061 查看
1.开启界面获取返回值
(1)采用一种特殊的方式开启Activity:
startActivityForResult(intent , 0);
(2)在被开启的Activity里面设置数据:
Intent data = new Intent();
data.putExtra("content", content);
setResult(0, data);
(3)记得关闭新开启的界面:
finish();
(4)在第一个Activity里面重写一个方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//data 就是返回的Intent数据,里面包含有数据
}
(5)有两个参数 请求码 requestCode resultCode (使用时候任选其中之一就行)
区别请求 或者 结果的来源
2.短信助手案例的优化:(使用请求码)
上一讲的短信助手的程序只是选择了短信的内容,显示生活中我们还必须有选择联系电话,这样我们才能发送数据。
(1)我们在activity_main.xml中添加[b]选择联系电话的UI,如下:[/b]
布局效果如下:
(2)在MainActivity,修改代码如下:
这里的startActivityForResult(Intent intent, int requestCode) 与 onActivityResult(int requestCode, int resultCode, Intent data)
第一个参数:intent是意图(这里就是打开相应的Activity);
第二个参数:requestCode是请求码;
这里定义两个请求码分别为:GET_SMS 与 GET_PHONE
GET_SMS:表示是MainActivity切换到SmsActivity的请求码;
[b][b]GET_PHONE :表示是MainActivity切换到ContactActivity的请求码;[/b][/b]
(3)添加”浏览选择联系人" ,跳转的界面ContactActivity,如下:
添加的”选择联系人"的布局文件,activity_contacts.xml如下:
当然上面布局文件中定义了Listview,[b]Listview设置适配器的时候也必然需要设置Listview各个子项item的样式,item_contacts.xml如下:[/b]
相应的SmsActivity如下:
public final void setResult(int resultCode, Intent data):
第一个参数是:结果码,这里我们是使用了请求码,所以SmsActivity和ContactsAcitivity的反馈到MainActicity的结果码,我们这里就不用设置,这里设为0
第二个参数是:[b]SmsActivity和ContactsAcitivity 反馈给MainActivity的intent数据[/b]
其余部分代码不用修改
3.当然代码也可以使用结果码优化,这里就不演示了。
(1)采用一种特殊的方式开启Activity:
startActivityForResult(intent , 0);
(2)在被开启的Activity里面设置数据:
Intent data = new Intent();
data.putExtra("content", content);
setResult(0, data);
(3)记得关闭新开启的界面:
finish();
(4)在第一个Activity里面重写一个方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//data 就是返回的Intent数据,里面包含有数据
}
(5)有两个参数 请求码 requestCode resultCode (使用时候任选其中之一就行)
区别请求 或者 结果的来源
2.短信助手案例的优化:(使用请求码)
上一讲的短信助手的程序只是选择了短信的内容,显示生活中我们还必须有选择联系电话,这样我们才能发送数据。
(1)我们在activity_main.xml中添加[b]选择联系电话的UI,如下:[/b]
<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的请求码;
[b][b]GET_PHONE :表示是MainActivity切换到ContactActivity的请求码;[/b][/b]
(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,[b]Listview设置适配器的时候也必然需要设置Listview各个子项item的样式,item_contacts.xml如下:[/b]
<?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
第二个参数是:[b]SmsActivity和ContactsAcitivity 反馈给MainActivity的intent数据[/b]
其余部分代码不用修改
3.当然代码也可以使用结果码优化,这里就不演示了。
相关文章推荐
- android AsyncTask介绍
- android从中国天气网获取天气
- Android项目中TabHost标签切换
- Android(java)学习笔记221:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
- android jni 有感一
- AIDL Android
- Android最佳性能实践(三)——高性能编码优化
- 快速提高Android开发效率的Web工具
- Android技术资料汇集
- Android最佳性能实践(二)——分析内存的使用情况
- Android EditText的设置
- MAC 下配置代理用于终端下载Android源码
- Android EditText的设置错误提示信息
- 【android】ImageView的src和background以及两者之间的神奇的差异
- 【Android开发】使用DDMS巧妙进行手机屏幕录制
- Android带平移动画的栏目选择功能
- android开发步步为营之75:ListView监听上滑下滑事件
- android自定义无上下padding的textview
- 第三方QQ登录不回调 (Android)
- android轻量级开源缓存框架——ASimpleCache(ACache)源码分析(封装好了一个工具类供大家使用)