Android基础(六) Activity

1.什么是Activity

    Activity是Android四大组件之一,程序显示的界面

2.如何创建Activity

    需要定义一个类继承Activity

    在清单文件AndroidManifest.xml的<application>节点中声明<activity>

3.启动Activity

    使用显式意图

        创建Intent对象,设置指定的类,调用startActivity(intent)方法来启动新的Activity

          new Intent(this, NewActivity.class);

        该方法一般用于同一个应用程序内部的Activity跳转

    使用隐式意图

        创建Intent对象,设置动作、数据、类型等信息,再使用startActivity(intent)方法来启动新的Activity

        intent.setClassName(this, "cn.itcast.activity.NewActivity");

        该方式灵活、可扩展性强

        或者:

        intent.setClassName("cn.itcast.downloader", "cn.itcast.downloader.MainActivity");

        该方式可以启动其他应用程序中的Activity

4.关闭Activity

    执行finish()方法

5.启动Activity时传递数据

    使用启动Activity的意图对象Intent.putExtra()方法可以携带一些数据到新的Activity中,在新的Activity中可以调用getIntent()方法得到Intent对象,再通过该Intent调用getStringExtra()、getIntExtra()等方法即可得到传递过来的数据。

    Intent中可以携带8种基本数据类型:基本数据类型的数组、Bundle、CharSequence、Serializable、Parcelable

6.关闭Activity时返回数据

    如果启动Activity时,需要目标Activity返回数据,那么就要使用startActivityForResult(Intent intent, int requestCode)方法来打开Activity,并重写onActivityResult(int requestCode, int resultCode, Intent data) 方法,该方法在目标Activity结束时自动执行,该方法的参数即是目标Activity传回的结果数据。

    而在目标Activity中需要调用setResult(int resultCode, Intent data)方法用于设置返回数据,当前目标Activity关闭时就会调用来源Activity的onActivityResult(int requestCode, int resultCode, Intent data) 方法。

7.使用隐式意图创建Activity

    显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件

    需要在清单文件中定义<activity>时,同时定义<intent-filter>才能被隐式意图启动。

    <intent-filter>中至少要配置一个<action>和一个<category>,否则Activity无法被隐式意图启动。

    Intent对象中设置的action、category、data,在<intent-filter>中必须全部包含时才能启动Activity。

    <intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不需要全部匹配,每个标签各匹配一个即可启动Activity。

    如果一个Intent可以匹配多个Activity,Android系统会提示用户进行选择。

public class MainActivity extends Activity {
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void explicit(View view) {
    	Intent intent = new Intent(this, OtherActivity.class);
    	// intent.setClass(this, OtherActivity.class);
    	// intent.setClassName(this, "com.xxx.activity.OtherActivity");
    	// intent.setClassName("com.xxx.activity", "com.xxx.activity.OtherActivity");
    	startActivity(intent);
    }
    
    public void implicit(View view) {
    	Intent intent = new Intent();
    	
    	/*
    	// 拨打电话
    	intent.setAction("android.intent.action.CALL");
    	intent.setData(Uri.parse("tel://18600012345"));
    	*/
    	
    	/*
    	// 打开浏览器 
    	intent.setAction("android.intent.action.VIEW");
    	intent.setData(Uri.parse("http://192.168.1.253:8080/15.Web"));
    	*/
    	
    	/*
    	// 播放音频
    	intent.setAction("android.intent.action.VIEW");
    	intent.setDataAndType(Uri.parse("file:///mnt/sdcard/Adele - Rolling in the Deep.mp3"), "audio/*");
    	*/
    	
    	/*
    	// 播放视频
    	intent.setAction("android.intent.action.VIEW");
    	intent.setDataAndType(Uri.parse("file:///mnt/sdcard/1.mp4"), "video/*");
    	*/
    	
    	/*
    	// 显示图片
    	intent.setAction("android.intent.action.VIEW");
    	intent.setDataAndType(Uri.parse("file:///mnt/sdcard/9.jpg"), "image/*");
    	*/
    	
    	/*
    	intent.setAction("com.xxx.action.OTHER_ACTIVITY");
    	*/
    	
    	startActivity(intent);
    }
    
    public void send(View view) {
    	Intent intent = new Intent(this, OtherActivity.class);	// 用来启动Activity, 发送广播, 启动服务
    	
    	/*
    	intent.putExtra("name", "张三");		// 用Intent传递数据
    	intent.putExtra("age", 18);
    	*/
    	
    	/*
    	Bundle bundle1 = new Bundle();
    	bundle1.putString("name", "张三");
    	bundle1.putInt("age", 18);
    	Bundle bundle2 = new Bundle();
    	bundle2.putString("name", "李四");
    	bundle2.putInt("age", 19);
    	intent.putExtra("bundle1", bundle1);
    	intent.putExtra("bundle2", bundle2);
    	*/
    	
    	Person p1 = new Person("王五", 20);
    	Person p2 = new Person("赵六", 21);
    	intent.putExtra("p1", p1);
    	intent.putExtra("p2", p2);
    	
    	startActivity(intent);
    }
    
    public void result(View view) {
    	Intent intent = new Intent(this, OtherActivity.class);
    	intent.putExtra("name", "张三");		
    	intent.putExtra("age", 18);
    	startActivityForResult(intent, 100);	// 启动一个Activity, 等待返回结果
    }
    
    // 当前Activity启动的新Activity关闭时, 就会自动执行这个方法
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	TextView mainTV = (TextView) findViewById(R.id.mainTV);
    	mainTV.setText(data.getStringExtra("name") + ": " + data.getIntExtra("age", -1));
    }
    
}
public class OtherActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other);
		
		TextView otherTV = (TextView) findViewById(R.id.otherTV);
		Intent intent = getIntent();
		String name = intent.getStringExtra("name");
		int age = intent.getIntExtra("age", -1);
		otherTV.setText(name + ": " + age);
		
		/*
		Bundle bundle1 = intent.getBundleExtra("bundle1");
		Bundle bundle2 = intent.getBundleExtra("bundle2");
		String name1 = bundle1.getString("name");
		int age1 = bundle1.getInt("age");
		String name2 = bundle2.getString("name");
		int age2 = bundle2.getInt("age");
		otherTV.setText(name1 + ": " + age1 + "; " + name2 + ": " + age2);
		*/

		/*
		Person p1 = (Person) intent.getSerializableExtra("p1");
		Person p2 = (Person) intent.getSerializableExtra("p2");
		otherTV.setText(p1.getName() + ": " + p1.getAge() + "; " + p2.getName() + ": " + p2.getAge());
		*/
		
		Intent data = new Intent();
		data.putExtra("name", "王五");
		data.putExtra("age", 21);
		setResult(200, data);		// 设置了结果数据
	}
	
	public void close(View view) {
		finish();	// 关闭当前Activity
	}

}
public class Person implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String name;
	private int age;

	public Person() {
		super();
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

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

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

posted on 2013-04-21 19:41  foolchen  阅读(294)  评论(0编辑  收藏  举报

导航