Android移动应用基础学习——第三章Activity

第三章 Activity

内容较多,伴随考研复习,更新较慢,还望谅解。

一、Activity的创建

Android移动应用基础学习——第三章Activity_第1张图片

  • @override oncreate方法创建:oncr+(alt+?)

    Android移动应用基础学习——第三章Activity_第2张图片
    Android移动应用基础学习——第三章Activity_第3张图片

习题:

Activity通过(  setContentView())方法可以设置它的布局文件

Activity的布局文件放在哪个目录下(res/layout)

二、Activity的生命周期

短信内容的保存

Android移动应用基础学习——第三章Activity_第4张图片

视频播放器

Android移动应用基础学习——第三章Activity_第5张图片

游戏使用

Android移动应用基础学习——第三章Activity_第6张图片
Android移动应用基础学习——第三章Activity_第7张图片

  • 完整生命周期:oncreate–onstart–onresume–onpause–onstop–ondestory
  • 可视生命周期:onstart–onresume–onpause–onstop
  • 前台生命周期:onresume–onpause

横竖屏切换

Android移动应用基础学习——第三章Activity_第8张图片

习题:

Activity获取焦点时执行方法是(onresume())

Activity销毁时执行执行方法是(ondestroy())

三、Activity的存活案例

Android移动应用基础学习——第三章Activity_第9张图片

习题:

Android使用( 任务栈 )的方式来管理Activity的实例

四、Android中的任务栈

栈:后进先出 队列:先进先出

  • 什么是任务栈

Android移动应用基础学习——第三章Activity_第10张图片

  • 任务栈清空,应用程序完全退出
  • 发送邮件的任务栈应用:

Android移动应用基础学习——第三章Activity_第11张图片

  • 进程与线程

Android移动应用基础学习——第三章Activity_第12张图片

  • 应用程序

在这里插入图片描述

习题:
Android采用(任务栈)的方式来管理Activity的实例

五、Activity四种启动模式

  • 设置启动模式(默认为standard)
    在这里插入图片描述

  • standard启动模式

在这里插入图片描述

  • singleTop启动模式

Android移动应用基础学习——第三章Activity_第13张图片

  • singleTask启动模式

Android移动应用基础学习——第三章Activity_第14张图片

  • singleInstance启动模式

      (一个应用程序一般只有一个任务栈,但是当启动模式是singleInstanc时,就会有多个任务栈)
    

Android移动应用基础学习——第三章Activity_第15张图片

习题:

1、当Activity的启动模式指定为( singleTask ),每次启动该Activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例

2、( singleTop )启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它不创建新的实例

六、显式意图和隐式意图

  • 显示意图(知道激活组件的名称)与隐式意图(描叙一个对应的动作)

Android移动应用基础学习——第三章Activity_第16张图片

  • 两种意图的使用场景

在这里插入图片描述

习题:

1、Intent intent = new Intent();

intent.setAction("cn.itscast.xxx");

startActivity(intent);

采用的是(隐式意图)启动Activity

2、没有明确指定组件名的Intent称为(隐式意图)

七、打开照相机案例

  • 显式意图

Android移动应用基础学习——第三章Activity_第17张图片

  • 隐式意图

Android移动应用基础学习——第三章Activity_第18张图片

习题:

1、下列能打开系统相机的方法是(隐式意图)

八、数据传递方式

Android移动应用基础学习——第三章Activity_第19张图片

习题

1、Android中Intent传递类对象时,该类对象需实现(Serializeable接口)或Parcelable接口

2、下列选项中不能通过Intent传递的是(对象obj)

九、用户注册案例

Android移动应用基础学习——第三章Activity_第20张图片

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)中

十、回传数据

Android移动应用基础学习——第三章Activity_第21张图片

  • 开启新的activity获取返回值

Android移动应用基础学习——第三章Activity_第22张图片

  • onActiciytyResult()方法使用
    Android移动应用基础学习——第三章Activity_第23张图片
    Android移动应用基础学习——第三章Activity_第24张图片Android移动应用基础学习——第三章Activity_第25张图片
习题

1、下列不是onActivityResult()方法参数的是(result)

2onActivityResult()方法有三个参数,其中(resultCode)表示在返回数据时传入结果码

十一、装备选择案例

Android移动应用基础学习——第三章Activity_第26张图片Android移动应用基础学习——第三章Activity_第27张图片
Android移动应用基础学习——第三章Activity_第28张图片

  • 实现装备回收案例:

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;
	@Override
	protected 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關閉使用的方法
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     
		if(resultCode==10)
		{
     
			//代表數據來源於shopping activity
			Info info=(Info)data.getExtras().get("info");
			//更新u i
			updateProgressBar(info);
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
//u i
	private 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,android,安卓,app)