Android -多页面开发

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法 当页面重新启动 


   
   
  
  
       
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值