Activity启动、传值以及生命周期

一、Activity


概念:活动面板   应用程序组件  可以绘制Ui界面  可以和用户进行交互 
     默认展示全屏  其他情况 界面比其他窗口小  悬浮在其他窗口上方


创建一个Activity的步骤:
     1.创建一个类继承Activity
     2.给Activity 添加生命周期方法  oncreate()
     3.要在清单文件进行注册 ,Application里进行注册 <activity name="包名.类名">


二、启动其他的Activity

        * 得到Intent(意图对象)  Activity   Fragment Service   BroadCastReceiver
* 参数1:上下文对象       当前是Activity
* 参数2:目标Activity   SecondActivity.class
        Intent intent = new Intent(MainActivity.this,FourActivity.class);
        startActivity(intent);
        【注】:1.FourActivity 要加载一个布局setContentView(R.layout.activity_second);
                2.FourActivity 要到AndroidManifest.xml中进行注册

三、Intent传值

       1.直接进行传值   传基本数据类型

         传递时的写法(MainActivity):
        // 获得edname(EditText)的值
String name = edname.getText().toString().trim();
// 获得RadioButton的值
int sexInt = -1;
// 判断选择的RadioButton 
if (rgMale.isChecked()) {
sexInt = 0;
} else if (rgFemale.isChecked()) {
sexInt = 1;
}
//添加意图  用于页面跳转和传值
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//将数据直接添加到intent里
intent.putExtra("name", name);
intent.putExtra("sexInt", sexInt);
//启动页面跳转
startActivity(intent);
        跳转后的写法(SecondActivity):
        setContentView(R.layout.activity_second);
tvName = (TextView) findViewById(R.id.tv_name);
tvSex = (TextView) findViewById(R.id.tv_sex);

Intent intent = getIntent();
String name = intent.getStringExtra("name");
int sex = intent.getIntExtra("sexInt", -1);
//给控件设置传递过来的值
tvName.setText(name);
if (0==sex) {
tvSex.setText("女");
}else if (1==sex) {
tvSex.setText("男");
}

      2.通过Bundle对象  传递基本数据类型

        传递时的写法(MainActivity):
        // 获得edname(EditText)的值
String name1 = edname.getText().toString().trim();
// 获得RadioButton的值
int sexInt1 = -1;
// 判断选择的RadioButton
if (rgMale.isChecked()) {
sexInt = 0;
} else if (rgFemale.isChecked()) {
sexInt = 1;
}
//添加意图  用于页面跳转和传值
Intent intent2 = new Intent(MainActivity.this, ThreeActivity.class);
// 获取Bundle对象 打包数据   bundle:一束,一捆
Bundle bundle = new Bundle();
//将数据添加到bundle对象中
bundle.putString("name1", name1);
bundle.putInt("sexInt1", sexInt1);
//将数据通过bundle对象加入到intent2中
intent2.putExtra("bundle", bundle);
//启动跳转
startActivity(intent2);

        跳转后的写法(ThreeActivity):
        tvName = (TextView) findViewById(R.id.tv_name);
tvSex = (TextView) findViewById(R.id.tv_sex);

Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("bundle");
String name = bundle.getString("name1");
int sex = bundle.getInt("sexInt",-1);

tvName.setText(name);
if (0==sex) {
tvSex.setText("女");
}else if (1==sex) {
tvSex.setText("男");
}

      3.直接传递对象    对象要进行序列化

        传递时的写法(MainActivity):
        // 获得edname(EditText)的值
String name = edname.getText().toString().trim();
// 获得RadioButton的值
int sexInt = -1;
// 判断选择的RadioButton
if (rgMale.isChecked()) {
sexInt = 0;
} else if (rgFemale.isChecked()) {
sexInt = 1;
}
//添加意图  用于页面跳转和传值
Intent intent = new Intent(MainActivity.this,FourActivity.class);
//创建person对象 将数据添加到person对象中
Person person = new Person(name, sexInt);
// 使用Object(person)传值    Person类必须实现Serializable接口
intent.putExtra("person", person);//第二个参数是Serializable类型的对象
//启动页面跳转
startActivity(intent);

        跳转后的写法(SecondActivity):
        tvName = (TextView) findViewById(R.id.tv_name);
tvSex = (TextView) findViewById(R.id.tv_sex);

Intent intent = getIntent();
Person person = (Person) intent.getSerializableExtra("person");
String name = person.getName();
int sex = person.getSex();

tvName.setText(name);
if (0==sex) {
tvSex.setText("女");
}else if (1==sex) {
tvSex.setText("男");
}

      4.通过Bundle对象   传递Object对象   对象要进行序列化

        传递时的写法(MainActivity):
        // 获得edname(EditText)的值
String name = edname.getText().toString().trim();
int sexInt = -1;//设置默认值-1:代表不男不女   1:男  0:女
if (rgMale.isChecked()) {
sexInt = 1;
}else if (rgFemale.isChecked()) {
sexInt = 0;
}
//创建person对象 将数据添加到person对象中
Person person = new Person(name,sexInt);
//添加意图  用于页面跳转和传值
Intent intent = new Intent(MainActivity.this,FiveActivity.class);
// 获取Bundle对象 打包数据   bundle:一束,一捆
Bundle bundle = new Bundle();
bundle.putSerializable("person",person);
//将数据通过bundle带有Object(person)对象加入到intent中
intent.putExtra("bundle", bundle);
//启动页面跳转
startActivity(intent);

        跳转后的写法(SecondActivity):
        tvName =  (TextView) findViewById(R.id.tv_name);
tvSex =  (TextView) findViewById(R.id.tv_sex);
//获得传过来的意图
Intent intent = getIntent();
//从intent里获取bundle
Bundle bundle = intent.getBundleExtra("bundle");
//从bundle得到Person对象
Person person = (Person) bundle.getSerializable("person");
String name = person.getName();
int sexInt = person.getSex();
//将的到的数据展示到控件上
tvName.setText(name);
if (0==sexInt) {
tvSex.setText("女");
}else if(1==sexInt){
tvSex.setText("男");

}

四、startActivityForResult传值


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends Activity {
	
	//请求码
	private static  int REQUEST_CODE =1001;
	private static  int REQUEST_CODE1 =REQUEST_CODE+1;
	
	private  EditText et;
	private  ImageView ivShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //初始化控件
        initView();
    }


	public void initView() {
		et = (EditText) findViewById(R.id.et);
        ivShow = (ImageView) findViewById(R.id.iv_show);
	}


    //按钮的点击事件
    public void MyClick(View v){
    	String name = et.getText().toString().trim();
    	
    	Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    	
    	intent.putExtra("name", name);
    	
    	/**
    	 * 参数1:意图对象
    	 * 参数2:请求码
    	 */
    	startActivityForResult(intent, REQUEST_CODE);
    	
    }
    
    /**
     * 处理返回结果的
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	// TODO Auto-generated method stub
    	super.onActivityResult(requestCode, resultCode, data);
    	//判断请求码
    	if(requestCode == REQUEST_CODE){
    		//判断结果码
    		if(resultCode == SecondActivity.RESULT_CODE){
    			//获取图片的R文件
    			int imgId = data.getIntExtra("imgId", R.drawable.ic_launcher);
    			//将图片展示到控件上
    			ivShow.setImageResource(imgId);
    			
    		}
    		
    	}
    	
    }
    
}
</pre><p></p><pre name="code" class="java">import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class SecondActivity extends Activity {
	
	//结果码
	public static final int RESULT_CODE = 2001;

	private TextView tv;
	private String name = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_second);

		initView();

		// 得到传递过来的Intent
		Intent intent = getIntent();

		name = intent.getStringExtra("name");

		tv.setText(name);

	}

	public void initView() {
		tv = (TextView) findViewById(R.id.tv);
	}

	public void MyClick(View v) {

		// 默认的图片的id
		int imgId = R.drawable.ic_launcher;

		if ("deer".equals(name)) {
			imgId = R.drawable.deer;
		} else if ("panda".equals(name)) {
			imgId = R.drawable.panda;
		} else if ("sheep".equals(name)) {
			imgId = R.drawable.sheep;
		}
		
		Intent intent = new Intent();
		intent.putExtra("imgId", imgId);
		//将结果返回上个界面  参数1:结果码  参数2:intent
		setResult(RESULT_CODE, intent);
		//关闭Activity 
		finish();

	}

}


五、使用Application 实现传值功能

       创建MyApplication类后要到清单文件中设置

     

import android.app.Application;

/**
 * 
 * 自定义一个Application
 * 需要在清单文件  将系统的Application替换了
 *
 */
public class MyApplication extends Application{
	
	private String name;
	
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
	

}
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //获取Application对象
        MyApplication myApplication =   (MyApplication) getApplication();
        myApplication.setName("张三");
    }


    public void Onclick(View v){
    	Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    	startActivity(intent);
    }
   
    
}


import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		//获取Application对象
		MyApplication myApplication = (MyApplication) getApplication();
		String name = myApplication.getName();
		
		//动态获取View
		TextView tv = new TextView(SecondActivity.this);
		tv.setText(name);
		
		//设置布局  View
		setContentView(tv);
	}

}



六、Activity的生命周期

例题运行结果:

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {

	//静态标记
	private static final String TAG = "MainActivity";
	/**
	 * 程序第一次启动时调用
	 * 作用:加载界面  初始化控件  事件监听
	 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "======onCreate=====");
    }
    /**
     * UI界面显示时调用  现阶段用户没有获取焦点(点击没有作用)
     */
    @Override
    protected void onStart() {
    	// TODO Auto-generated method stub
    	super.onStart();
    	Log.e(TAG, "======onStart=====");
    }
    /**
     * 用户获取焦点调用(点击有作用)  重新获取数据
     */
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	Log.e(TAG, "======onResume=====");
    }
    /**
     * 用户失去焦点是调用
     */
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	Log.e(TAG, "======onPause=====");
    }  
    /**
     * 用户界面被完全遮挡
     */
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	Log.e(TAG, "======onStop=====");
    }   
    /**
     * 用户界面被完全遮挡之后,重新回到当前的Activity
     */
    @Override
    protected void onRestart() {
    	// TODO Auto-generated method stub
    	super.onRestart();
    	Log.e(TAG, "======onRestart=====");
    }   
    /**
     * Activity被销毁时调用 关闭资源
     */
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	Log.e(TAG, "======onDestroy=====");
    }    
    public void MyClick(View v){
    	Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    
    }
}

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class SecondActivity extends Activity {

	//静态标记
	private static final String TAG = "SecondActivity";
	/**
	 * 程序第一次启动时调用
	 * 作用:加载界面  初始化控件  事件监听
	 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "======onCreate=====");
    }
    /**
     * UI界面显示时调用  现阶段用户没有获取焦点(点击没有作用)
     */
    @Override
    protected void onStart() {
    	// TODO Auto-generated method stub
    	super.onStart();
    	Log.e(TAG, "======onStart=====");
    }
    /**
     * 用户获取焦点调用(点击有作用)  重新获取数据
     */
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	Log.e(TAG, "======onResume=====");
    }
    /**
     * 用户失去焦点是调用
     */
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	Log.e(TAG, "======onPause=====");
    }
    /**
     * 用户界面被完全遮挡
     */
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	Log.e(TAG, "======onStop=====");
    }
    /**
     * 用户界面被完全遮挡之后,重新回到当前的Activity
     */
    @Override
    protected void onRestart() {
    	// TODO Auto-generated method stub
    	super.onRestart();
    	Log.e(TAG, "======onRestart=====");
    }
    /**
     * Activity被销毁时调用 关闭资源
     */
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	Log.e(TAG, "======onDestroy=====");
    }
}

七、Activity现场保护

          存数据:onSaveInstanceState()
          取数据:
方法一;   在onCreate()
方法二; onRestoreInstanceState()
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {	
	//用于计数
	private int progress = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
//        //获取现场保护中值的方法:方法1:
//        //判断savedInstanceState中的值是否为空
//        if (savedInstanceState!=null) {
//        	 //取出现场保护里保存的数值
//        	savedInstanceState.getInt("progress");
//		}
        
        
    }
    public void MyClick(View v){
    	Toast.makeText(MainActivity.this, "progress"+(progress++), Toast.LENGTH_SHORT).show();
    }    
    /**
     * 用于现场保护
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    	// TODO Auto-generated method stub
    	super.onSaveInstanceState(outState);
    	//将值保存起来
    	outState.putInt("progress",progress);
    	
    } 
    //获取现场保护中值的方法:方法2:
    //调用获取值的方法
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    	// TODO Auto-generated method stub
    	super.onRestoreInstanceState(savedInstanceState);
    	
    	//判断savedInstanceState中的值是否为空
    	if (savedInstanceState!=null) {
       	 //取出现场保护里保存的数值
    		progress = savedInstanceState.getInt("progress");
		}
    
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值