Android -多页面开发

本文介绍了Android应用程序中启动活动的方法、数据传递技巧,并通过具体案例解析了短信发送器的设计与实现过程。

1.清单文件介绍 

 1.1如果想让你的应用程序有多个启动入口应该做如下配置:
  1. <activity android:name=".Main2Activity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>
 1.2 application节点下的icon和label可以和activity节点下不一样 如果activity自己配置了icon和label属性使用自己的.

2.意图

   1.显示意图:通过设置具体的包名类名开启页面
   2.隐式意图:通过设置一组动作或者数据开启页面
   3.思考什么时候用显示 什么时候用隐式:开系统应用的页面用隐式 自己应用页面用显示

3.人品计算器

   功能:计算人品 
   代码实现过程:
   1.实现UI
    
   2.mainActivity代码如下:
  1. public class MainActivity extends AppCompatActivity {
  2. private EditText et_name;
  3. private RadioGroup rg_group;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. //1.找的控件
  9. et_name = (EditText) findViewById(R.id.et_name);
  10. rg_group = (RadioGroup) findViewById(R.id.rg_group);
  11. }
  12. //点击按钮 获取用户输入的姓名 对人品进行计算
  13. public void click(View view) {
  14. //1.获取姓名
  15. String name = et_name.getText().toString().trim();
  16. //2.判断name是否为空
  17. if (TextUtils.isEmpty(name)){
  18. Toast.makeText(this, "name不能为空", Toast.LENGTH_SHORT).show();
  19. return;
  20. }
  21. //3.判断用户是否选择了性别
  22. int sex = 0;
  23. int checkedRadioButtonId = rg_group.getCheckedRadioButtonId();
  24. switch (checkedRadioButtonId){
  25. case R.id.rb_male: //代表选择的是男
  26. sex = 1;
  27. break;
  28. case R.id.rb_female: //代表选择的是女
  29. sex = 2;
  30. break;
  31. case R.id.rb_other: //代表选择的是人妖
  32. sex = 3;
  33. break;
  34. }
  35. //4.判断性别是否被勾选
  36. if (sex == 0){
  37. Toast.makeText(this, "请选择性别", Toast.LENGTH_SHORT).show();
  38. return;
  39. }
  40. //5.实现页面跳转
  41. Intent intent = new Intent(this, ResultActivity.class);
  42. //6.当跳转页面之前实现数据传递 map(键:值)
  43. intent.putExtra("name",name);
  44. intent.putExtra("sex",sex);
  45. //7.实现了页面跳转
  46. startActivity(intent);
  47. }
  48. }
 3.结果页面代码如下:
  1. public class ResultActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_result);
  6. //1.找的控件
  7. TextView tv_name = (TextView) findViewById(R.id.tv_name);
  8. TextView tv_sex = (TextView) findViewById(R.id.tv_sex);
  9. TextView tv_result = (TextView) findViewById(R.id.tv_result);
  10. //2.先获取上一个页面传递的数据 数据是怎么传的就怎么取 传递的是什么类型 就对应取什么类型
  11. Intent intent = getIntent(); //返回开启此页面的意图对象
  12. String name = intent.getStringExtra("name");
  13. int sex = intent.getIntExtra("sex", 0);
  14. //3.更新数据
  15. tv_name.setText(name);
  16. switch (sex){
  17. case 1: //代表选择的是男
  18. tv_sex.setText("男");
  19. break;
  20. case 2: //代表选择的是女
  21. tv_sex.setText("女");
  22. break;
  23. case 3: //代表选择的是人妖
  24. tv_sex.setText("人妖");
  25. break;
  26. }
  27. //4.随机生成一个分
  28. Random random = new Random();
  29. int score = random.nextInt(101);
  30. if (score> 90){
  31. tv_result.setText("您家祖坟都冒青烟了 人品很好");
  32. }else if (score > 75){
  33. tv_result.setText("您的人品还可以,当仍要努力");
  34. }else if (score > 60){
  35. tv_result.setText("您的人品刚刚及格");
  36. }else{
  37. tv_result.setText("你的人品太差了。你应该有干坏事的嗜好吧?");
  38. }
  39. }
  40. }

4.短信大全案例

  1. public class MainActivity extends AppCompatActivity {
  2. String[] objects = {"今天的风儿轻柔无比,今天的花儿香飘万里;今天的鸟儿十分欢喜,今天的云儿满载笑意;今天的事儿万分顺利,今天的人儿如此甜蜜。所有美..."
  3. ,"丫头,生活是你自己的,你哭它就对你哭,你笑它就对你笑。转眼,又是一年,你的生日即将来到。今年,还是少不了我对你的祝福,我忍不住..."
  4. ,"世界上最动听的声音,是妈妈声声的呼唤;世界上最温暖的笑容,是妈妈温暖的笑脸。妈妈,原谅生日时我不能陪在您身边,在这个日子里,我..."
  5. ,"今天是你的生日,祝你:发财势头如快马加鞭,一日千里;发展速度如滔滔江水,势不可挡;好事发生如雨后春笋,络绎不绝;祝福发送如比赛..."};
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. //1,找的listview
  11. ListView lv = (ListView) findViewById(R.id.lv);
  12. //2.把数组里面的内容展示到listview上
  13. lv.setAdapter(new ArrayAdapter<String>(getApplicationContext(),R.layout.item,R.id.tv,objects));
  14. //3.点击listview的条目跳转到系统发送短信页面 button:
  15. lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  16. //当list的条目点击的时候执行
  17. @Override
  18. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  19. //4.把选中的条目的数据取出来 数据在哪里存着 就取哪里取
  20. String data = objects[position];
  21. //5.跳转到发送短信页面 显示意图 隐式
  22. Intent intent = new Intent();
  23. //5.1 匹配意图过滤器
  24. intent.setAction("android.intent.action.SEND");
  25. intent.addCategory("android.intent.category.DEFAULT");
  26. intent.setType("text/plain");
  27. //5.2 把data数据传递到短信发送页面
  28. intent.putExtra("sms_body",data);
  29. //6.启动意图
  30. startActivity(intent);
  31. }
  32. });
  33. }

5.短信发送器
   2 .3 共同点:都是有2个页面  都是从A页面跳转到B页面 并且把A页面的数据传递到B页面
 短信发送器也是2个页面,A页面开启B页面,当B页面关闭的时候,把B页面的数据返回给A 
   代码实现过程
   1.画UI
    
      2.mainActivity逻辑
  1. public class MainActivity extends AppCompatActivity {
  2. private EditText et_context;
  3. private EditText et_number;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. //1.找的控件
  9. et_context = (EditText) findViewById(R.id.et_content);
  10. et_number = (EditText) findViewById(R.id.et_number);
  11. }
  12. //点击按钮跳转到ContactActivity页面
  13. public void add(View view) {
  14. Intent intent = new Intent(this, ContactActivity.class);
  15. // startActivity(intent);
  16. //当开启一个页面 并且还需要开启这个页面返回的数据 这时候应该使用下面这个方法
  17. startActivityForResult(intent,1);
  18. }
  19. //点击按钮跳转到 短信模板页面
  20. public void click(View view) {
  21. Intent intent = new Intent(this, SmsTemplateActivity.class);
  22. startActivityForResult(intent,2);
  23. }
  24. //点击按钮实现发送短信功能
  25. public void send(View view) {
  26. //1.获取发送的号码和发送的内容
  27. String content = et_context.getText().toString().trim();
  28. String number = et_number.getText().toString().trim();
  29. //2.获取smsmanager 短信管理者实例
  30. SmsManager smsmanager = SmsManager.getDefault();
  31. //3.对发送的内容进行切割
  32. ArrayList<String> smss = smsmanager.divideMessage(content);
  33. for (String sms : smss) {
  34. //4.发送短信
  35. smsmanager.sendTextMessage(number,null,sms,null,null);
  36. }
  37. }
  38. //当启动的页面调用finish方法的时候执行
  39. @Override
  40. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  41. if (resultCode == 10){
  42. //说明数据是从联系人页面返回
  43. //1.获取联系人页面返回的数据
  44. String phone = data.getStringExtra("phone");
  45. //2.把phone的数据展示到EditText上
  46. et_number.setText(phone);
  47. }else if (resultCode == 20){
  48. //1.获取短信模板页面返回的数据
  49. String smsContent = data.getStringExtra("smsContent");
  50. //2.把smsContent数据展示到EditText控件上
  51. et_context.setText(smsContent);
  52. }
  53. }
  54. }
 3.联系人页面逻辑:
  1. package com.itheima.smssend;
  2. import android.content.Intent;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.text.format.Formatter;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.AdapterView;
  9. import android.widget.BaseAdapter;
  10. import android.widget.ListView;
  11. import android.widget.TextView;
  12. import org.w3c.dom.Text;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class ContactActivity extends AppCompatActivity {
  16. private List<Person> lists;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_contact);
  21. //1.找的listview 用来展示系统的联系人
  22. ListView lv_contact = (ListView) findViewById(R.id.lv_contact);
  23. //2.展示联系人信息 先取出联系人的数据 怎么取(暂时取不了 内容提供者 今天先模拟)
  24. lists = new ArrayList<>();
  25. for (int i = 0; i <= 10; i++) {
  26. Person person = new Person();
  27. person.setName("zhangsan"+i);
  28. person.setPhone("110"+i);
  29. lists.add(person);
  30. }
  31. //3.把集合里面的数据展示到listview上
  32. lv_contact.setAdapter(new MyAdapter());
  33. //4.给listview的条目设置点击事件
  34. lv_contact.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  35. @Override
  36. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  37. //5.点击那个条目就获取哪个条目的号码
  38. String phone = lists.get(position).getPhone();
  39. //5.1创建意图对象用来传递数据
  40. Intent intent = new Intent();
  41. intent.putExtra("phone",phone);
  42. //5.2 把数据返回给调用者
  43. setResult(10,intent);
  44. //6.把当前页面关闭 并且把数据返回给上一个页面
  45. finish(); // 谁启动你就把数据返回给谁 通过onActivityResult方法把数据返回
  46. }
  47. });
  48. }
  49. //定义listview适配器
  50. class MyAdapter extends BaseAdapter{
  51. @Override
  52. public int getCount() {
  53. return lists.size();
  54. }
  55. @Override
  56. public Object getItem(int position) {
  57. return null;
  58. }
  59. @Override
  60. public long getItemId(int position) {
  61. return 0;
  62. }
  63. @Override
  64. public View getView(int position, View convertView, ViewGroup parent) {
  65. //0.对listview优化
  66. View view;
  67. if (convertView == null){
  68. view = View.inflate(getApplicationContext(),R.layout.item,null);
  69. }else{
  70. view = convertView;
  71. }
  72. //1.找到条目的控件
  73. TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
  74. TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
  75. //2.把集合里面的数据展示出来
  76. tv_name.setText(lists.get(position).getName());
  77. tv_phone.setText(lists.get(position).getPhone());
  78. return view;
  79. }
  80. }
  81. }
4.短信模板页面逻辑
  1. public class SmsTemplateActivity extends AppCompatActivity {
  2. String objects[] = {"我在开会,请稍后联系","我在吃饭,请稍后联系","我在睡觉,请稍后联系","我在打代码,请稍后联系"};
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_sms_template);
  7. //1.找的控件
  8. ListView listView = (ListView) findViewById(R.id.lv);
  9. listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(),R.layout.smstemplate_item,R.id.textView,objects));
  10. //2.给listview设置点击事件
  11. listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  12. @Override
  13. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  14. //3.把点击的条目的数据取出来
  15. String smsContent = objects[position];
  16. //4.把模板内容返回给上一个页面
  17. Intent intent = new Intent();
  18. intent.putExtra("smsContent",smsContent);
  19. //5.把数据返回给调用者
  20. setResult(20,intent);
  21. //6.调用finsih方法 把当前页面关闭
  22. finish();
  23. }
  24. });
  25. }
  26. }

6.Activity的生命周期 

   1.onCreate方法 当activity第一次创建的时候调用
   2.onDestory方法 当activity销毁的时候调用
   3.onStart方法 当activity变成可视(能够用人的肉眼看的见页面)
   4.onStop方法 当activity不可见的时候调用
   5.onResume方法 说明用户可以在页面上进行交互了(界面上的按钮被点了) 
   6.onPause 方法 说明用户不可以和页面交互了 
   7.onRestart方法 当页面重新启动 


   
   
  
  
       
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值