zoukankan      html  css  js  c++  java
  • 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;
    	}
    
    }
    
  • 相关阅读:
    谈谈 在 .Net 生态里为什么没有 Hadoop 系列 ?
    谈谈在 .Net 平台上的 软件生态 和 软件生产力
    我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
    推荐一个 基于 WebSocket 和 Redis 的 即时通信 开源项目
    漫谈 12306 架构
    在提交代码的时候分支上出现detached head
    地铁线路查询算法
    .NET 动态脚本语言
    Socket连接池
    比较JqGrid与XtraGrid
  • 原文地址:https://www.cnblogs.com/chenchong/p/3034319.html
Copyright © 2011-2022 走看看