扣丁学堂笔记第08天Activity组件

1.Activity概述


2.状态与生命周期(三大状态与七大方法)

状态


生命周期

扣丁学堂笔记第08天Activity组件_第1张图片

扣丁学堂笔记第08天Activity组件_第2张图片

onCreate():创建Activity第一个被调用的方法,用于加载布局,初始化UI组件,注册事件;

onStart():在onCreate()之后被调用,用于显示界面,但界面与用户还不能进行交互;

onResume():在onStart()之后被调用,该方法执行完成后,用户与界面可以进行交互,当前Activity进入resumed状态(运行状态);

                       当一个paused状态的Activity重新返回时,会再次调用该方法,让Activity进入运行状态;

onPause():当其他Activity(透明或窗口模式)进入时,该方法会被调用,让当前Activity进入paused状态(暂停状态);

                    当前Activity还可见但不可交互,如果其他更高级别的App需要内存时,当前Activity可能会被销毁(killed);

                    当前Activity被返回时,会调用onResume()方法;

onStop():当其他Activity完全覆盖该Activity时,会被调用,当前Activity进入stopped状态(停止状态);

                 不可见,如果其他更高级别的APP需要内存时,当前Activity可能会被销毁(killed);

                 当前Activity被返回时,会调用onRestart()方法;

onRestart():当一个stopped的Activity被返回时时调用,之后再调用onResume()进入resumed状态(运行状态);

onDestroy():当前Activity被销毁时调用,通常用来释放资源,当前Activity killed;


3.传递简单数据

MainActivity

package com.example.activitytest;

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


public class MainActivity extends Activity {

	
	private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText1);
    }


    public void sendClick(View v){
    	Intent intent = new Intent(this,Activity2.class);
    	String info = editText.getText().toString();
//    	传递数据
//    	方式一:通过Bundle封装数据,再把数据放入intent,Activity2得到数据是逆向的
//    	Bundle data = new Bundle();
//    	data.putString("info", info);
//    	intent.putExtra("data", data);
    	
//    	方式二:直接调用
    	intent.putExtra("info", info);
    	startActivity(intent);
    }
   
}


Activity2

package com.example.activitytest;

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

public class Activity2 extends Activity{

	private TextView textView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_2);
		textView = (TextView) findViewById(R.id.tv_2);
		
		Intent intent = getIntent();
//		Bundle data = getIntent().getBundleExtra("data");
//		String info = data.getString("info");
		
		String info = intent.getStringExtra("info");
		textView.setText(info);
		
	}
}



4.传递自定义对象数据

通过自定义类实现Serializable接口和Parcelable接口来传递自定义对象的数据

Cat.java

package com.example.activitytest;

import java.io.Serializable;

public class Cat implements Serializable{

	String name;
	int age;
	String type;
	@Override
	public String toString() {
		return "Cat [name=" + name + ", age=" + age + ", type=" + type + "]";
	}
	
}


Dog.java

package com.example.activitytest;

import android.os.Parcel;
import android.os.Parcelable;

public class Dog implements Parcelable{

	
	String name;
	int age;
	String type;
	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		// TODO Auto-generated method stub
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(type);
	}
	
	@Override
	public String toString() {
		return "Dog [name=" + name + ", age=" + age + ", type=" + type + "]";
	}

	public static final Parcelable.Creator<Dog> CREATOR
    = new Parcelable.Creator<Dog>() {
		public Dog createFromParcel(Parcel in) {
			Dog dog = new Dog();
			dog.name = in.readString();
			dog.age = in.readInt();
			dog.type = in.readString();
			return dog;
		}

		public Dog[] newArray(int size) {
    return new Dog[size];
		}
	};


}


MainActivity.java

package com.example.activitytest;

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

public class MainActivity extends Activity {

	private EditText editText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		editText = (EditText) findViewById(R.id.editText1);
	}

	public void sendClick(View v) {
		Intent intent = new Intent(this, Activity2.class);
		String info = editText.getText().toString();
		// 传递数据
		// 方式一:通过Bundle封装数据,再把数据放入intent,Activity2得到数据是逆向的
		// Bundle data = new Bundle();
		// data.putString("info", info);
		// intent.putExtra("data", data);

		// 方式二:直接调用
		intent.putExtra("info", info);
		startActivity(intent);
	}

	public void sendobj1Click(View v) {
		Cat cat = new Cat();
		cat.name = "皮卡丘";
		cat.age = 2;
		cat.type = "美短";

		Intent intent = new Intent(this, Activity2.class);
		intent.putExtra("cat", cat);
		startActivity(intent);
	}

	public void sendobj2Click(View v) {

		Dog dog = new Dog();
		dog.name = "汪汪";
		dog.age = 1;
		dog.type = "萨摩耶";

		Intent intent = new Intent(this, Activity2.class);
		intent.putExtra("dog", dog);
		startActivity(intent);

	}
}


Activity2.java

package com.example.activitytest;

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

public class Activity2 extends Activity{

	private TextView textView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_2);
		textView = (TextView) findViewById(R.id.tv_2);
		
		Intent intent = getIntent();
//		Bundle data = getIntent().getBundleExtra("data");
//		String info = data.getString("info");
		
//		String info = intent.getStringExtra("info");
//		textView.setText(info);

		
//		Cat cat = (Cat) intent.getSerializableExtra("cat");
//		textView.setText(cat.toString());
		
		
		Dog dog = intent.getParcelableExtra("dog");
		textView.setText(dog.toString());
		
	}
}



5.处理返回结果

调用startActivity()方法,并且重写onActivityResult()方法:接收三个参数:requestCode(在starttActivityResult中设置)、resultOK(在点击事件设置)、data;

点击事件onItemClick:先根据position得到数据,定义为字符串类型,在调用intent的putExtra方法放入数据,再调用setResult方法,然后finish();

具体onActivityResult()代码:使用if语句,如果requestCode和resultCode都满足要求,就getStringExtra(),然后再editText中setText();


要实现点击按钮模拟拨号的界面,调用intent的setAction()传入Intent.ACTION_CALL,再调用setData方法传入Uri.parse("tel:"+number);

最后别忘了在清单文件中加入CALL_PHONE的权限


本节踩过好多坑啊!!!代码量还是不够,还是经验不足啊!!!

1.RESULT_O我居然自己赋值了,要哭!

2.自己创建的Activity忘记在清单文件中注册了!

3.实现接口类的监听事件忘记在onCreate里注册了!

4.getIntent()方法乱用啊!得是new Intent()!

5.忘记在清单文件里添加打电话的用户权限了!


MainActivity

package com.example.callphonetest;

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


public class MainActivity extends Activity {

    private static final int REQUEST_CODE = 0x1;
    private EditText editText;
    

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText1);
    }


    public void selectClick(View v){
    	Intent intent = new Intent(this,PhoneNumberActivity.class);
    	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&&resultCode==RESULT_OK){
    		String number = data.getStringExtra("number");
    		editText.setText(number);
    	}
    }
    
    public void callClick(View v){
    	String number = editText.getText().toString();
    	Intent intent = new Intent();//这里写getIntent()_就不行了,哎,还是太嫩,很多都不懂
    	intent.setAction(Intent.ACTION_CALL);
    	intent.setData(Uri.parse("tel:"+number));
    	startActivity(intent);
    }
}


PhoneNumberActivity

package com.example.callphonetest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class PhoneNumberActivity extends Activity implements OnItemClickListener{

	
	
	private ListView listView;
	private String[] numbers ={"131****2160","10010","1001011","159****4296"};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.number_layout);
		listView = (ListView) findViewById(R.id.listView);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,android.R.id.text1,numbers);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(this);
	}
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		// TODO Auto-generated method stub
		String number = numbers[position];
		Intent intent = new Intent(this,MainActivity.class);
		intent.putExtra("number", number);
		setResult(RESULT_OK, intent);//在RESULT_OK这里醉了,收REQUEST_CODE影响,惯性思维也给它赋了一个值,我死去的时间啊!!!
		finish();
		
		
	}
}


6.屏幕方向与显示方向

扣丁学堂笔记第08天Activity组件_第3张图片


7.屏幕方向旋转

屏幕旋转后,默认会重新创建一个Activity,为了保存之前Activity状态,可以重写onSaveInstanceState()方法来保存相关数据,然后在onCreate()方法里还原数据

扣丁学堂笔记第08天Activity组件_第4张图片


8.SharedPreferences

Activity通过SharedPreferences保存数据

扣丁学堂笔记第08天Activity组件_第5张图片

MainActivity

package com.example.sharedpreferencestest;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;


public class MainActivity extends Activity {

	private EditText editText;
	private SharedPreferences sp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText1);
        sp = getSharedPreferences("msg", Context.MODE_PRIVATE);
    }


    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	editText.setText(sp.getString("msg", ""));

    }
    
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	String msg = editText.getText().toString();
    	if(TextUtils.isEmpty(msg)){
    		return;
    	}
    	SharedPreferences.Editor editor = sp.edit();
    	editor.putString("msg", msg);
    	editor.commit();
    }
    
}



你可能感兴趣的:(扣丁学堂笔记第08天Activity组件)