Android移动应用基础学习——第三章Activity
16lz
2021-01-23
第三章 Activity
内容较多,伴随考研复习,更新较慢,还望谅解。
一、Activity的创建
-
@override oncreate方法创建:oncr+(alt+?)
习题:Activity通过( setContentView())方法可以设置它的布局文件Activity的布局文件放在哪个目录下(res/layout)
二、Activity的生命周期
短信内容的保存
视频播放器
游戏使用
- 完整生命周期:oncreate–onstart–onresume–onpause–onstop–ondestory
- 可视生命周期:onstart–onresume–onpause–onstop
- 前台生命周期:onresume–onpause
横竖屏切换
习题:Activity获取焦点时执行方法是(onresume())Activity销毁时执行执行方法是(ondestroy())
三、Activity的存活案例
习题:Android使用( 任务栈 )的方式来管理Activity的实例
四、Android中的任务栈
栈:后进先出 队列:先进先出
- 什么是任务栈
- 任务栈清空,应用程序完全退出
- 发送邮件的任务栈应用:
- 进程与线程
- 应用程序
习题:Android采用(任务栈)的方式来管理Activity的实例
五、Activity四种启动模式
-
设置启动模式(默认为standard)
-
standard启动模式
- singleTop启动模式
- singleTask启动模式
-
singleInstance启动模式
(一个应用程序一般只有一个任务栈,但是当启动模式是singleInstanc时,就会有多个任务栈)
习题:1、当Activity的启动模式指定为( singleTask ),每次启动该Activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例2、( singleTop )启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它不创建新的实例
六、显式意图和隐式意图
- 显示意图(知道激活组件的名称)与隐式意图(描叙一个对应的动作)
- 两种意图的使用场景
习题:1、Intent intent = new Intent();intent.setAction("cn.itscast.xxx");startActivity(intent);采用的是(隐式意图)启动Activity2、没有明确指定组件名的Intent称为(隐式意图)
七、打开照相机案例
- 显式意图
- 隐式意图
习题:1、下列能打开系统相机的方法是(隐式意图)
八、数据传递方式
习题1、Android中Intent传递类对象时,该类对象需实现(Serializeable接口)或Parcelable接口2、下列选项中不能通过Intent传递的是(对象obj)
九、用户注册案例
MainActivity.java中
import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.RadioGroup; public class MainActivity extends Activity { private EditText et_username; private EditText et_pwd; private RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到我们关系的控件 et_username = (EditText) findViewById(R.id.et_username); et_pwd = (EditText) findViewById(R.id.et_pwd); rg= (RadioGroup) findViewById(R.id.rg); } public void click(View View) { // TODO Auto-generated method stub String username=et_username.getText().toString().trim(); String pwd=et_pwd.getText().toString().trim(); int getCheckedRadioButtonId=rg.getCheckedRadioButtonId(); //定义一个变量,来判断是男是女 int sex=0; switch (getCheckedRadioButtonId) { case R.id.rb_male: sex=1; break; case R.id.rb_female: sex=2; break; } //将数据传输到第二个页面,通过意图把数据传递过去 Intent intent=new Intent(this,second_main.class); //携带数据 intent.putExtra("name", username); intent.putExtra("pwd", pwd); intent.putExtra("sex", sex); //开启意图 startActivity(intent); } }
second_main中
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.TextView; public class second_main extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加载布局 setContentView(R.layout.secondanli); //找到我们关心的控件 TextView tv_name = (TextView) findViewById(R.id.tv_name); TextView tv_pwd = (TextView) findViewById(R.id.tv_pwd); TextView tv_sex= (TextView) findViewById(R.id.tv_sex); //获取开启此activity的意图对象 Intent intent =getIntent(); //获取携带来的数据 String name=intent.getStringExtra("name"); String pwd=intent.getStringExtra("pwd"); int sex=intent.getIntExtra("sex", 0); //展示到控件上 tv_name.setText(name); tv_pwd.setText(pwd); switch (sex) { case 1:tv_sex.setText("男"); break; case 2: tv_sex.setText("女"); break; } } }
习题: 两个RadioButton要实现单选需要包裹在(RadioGroup)中
十、回传数据
- 开启新的activity获取返回值
- onActiciytyResult()方法使用
习题1、下列不是onActivityResult()方法参数的是(result)2、onActivityResult()方法有三个参数,其中(resultCode)表示在返回数据时传入结果码
十一、装备选择案例
- 实现装备回收案例:
MainActivity.java中
package com.example.zhuangbeixuanze;import com.example.domain.Info;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.text.style.UpdateAppearance;import android.view.Menu;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity { private ProgressBar pb1;private ProgressBar pb2;private ProgressBar pb3;private TextView tv_life;private TextView tv_atk;private TextView tv_quick;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 找到我们关心的控件pb1 = (ProgressBar) findViewById(R.id.progressBar1);pb2 = (ProgressBar) findViewById(R.id.progressBar2);pb3 = (ProgressBar) findViewById(R.id.progressBar3);tv_life =(TextView)findViewById(R.id.tv_life);tv_atk =(TextView)findViewById(R.id.tv_atk);tv_quick =(TextView)findViewById(R.id.tv_quick);//初始化进度条的最大值pb1.setMax(1000);pb2.setMax(1000);pb3.setMax(1000);}//点击按钮跳转到shop页面public void click1(View v) { Intent intent= new Intent(this,ShoppingActivity.class);//开启一个页面并且要开启这个页面的startActivityForResult(intent,1);}//當我們開啓activity關閉使用的方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode==10){ //代表數據來源於shopping activityInfo info=(Info)data.getExtras().get("info");//更新u iupdateProgressBar(info);}super.onActivityResult(requestCode, resultCode, data);}//u iprivate void updateProgressBar(Info info) { //获取当前进度int progress1=pb1.getProgress();int progress2=pb2.getProgress();int progress3=pb3.getProgress();//更新进度pb1.setProgress(progress1+info.getLife());pb2.setProgress(progress2+info.getAttack());pb3.setProgress(progress3+info.getQuick());//更新一些text view的值tv_life.setText(pb1.getProgress()+"");tv_atk.setText(pb2.getProgress()+"");tv_quick.setText(pb3.getProgress()+"");}}
ShoppingActivity中
package com.example.zhuangbeixuanze; import com.example.domain.Info; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.RelativeLayout; import android.widget.TextView; public class ShoppingActivity extends Activity implements OnClickListener{ private Info info; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //加载布局 setContentView(R.layout.activity_shop); findViewById(R.id.rl).setOnClickListener(this); //初始化顯示數據 info=new Info("金劍", 20, 100, 20); //找到控件數據 TextView tv_name = (TextView) findViewById(R.id.tv_name); TextView tv_life = (TextView) findViewById(R.id.tv_life); TextView tv_attack = (TextView) findViewById(R.id.tv_attack); TextView tv_speed= (TextView) findViewById(R.id.tv_speed); //初始化數據,展示到控件上 tv_attack.setText("攻擊力"+info.getAttack()); tv_life.setText("生命值"+info.getLife()); tv_speed.setText("速度"+info.getQuick()); tv_name.setText(info.getName()); } @Override public void onClick(View v){ // 具體判斷點擊的是誰 switch (v.getId()) { case R.id.rl: //獲取當前數據,把info數據返回 Intent intent=new Intent(); intent.putExtra("info",info); //把結果返回給調用者(main activity) setResult(10, intent); //關閉當前頁面,通過on activity result方法返回 finish(); break; default: break; } } }
习题ProgressBar设置当前进度的方法是(setProgress())
更多相关文章
- android 快速滚动条设置(像新浪微博,滚动的时候会出现悬浮的滚动
- picasso-强大的Android图片下载缓存库
- 如何使用Android MediaStore裁剪大图片
- android 5.0新特性学习--Drawable Tinting(为图片资源着色)
- android中Matrix之一(图片二维转动)
- android(drawable文件夹)图片适配
- Android UI基础教程 目录
- 关于android示例程序(bitmapfun)——高效加载图片的坑爹地方
- android强大的图片下载和缓存库Picasso