Android基础学习笔记-Activity开启与数据传递

创建Activity

Ø  定义Activity

Ÿ   定义类继承Activity

Ÿ   在AndroidManifest.xml的<application>节点中声明<activity>

Ø  显式意图创建方式

Ÿ   构造函数,代码少

new Intent(this, NewActivity.class);

Ÿ   类名形式,灵活,可扩展性强

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

Ÿ   包名类名形式,可启动其他程序中的Activity

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

Ø  创建Activity并传递数据

Ÿ   在意图对象中封装了一个Bundle对象,可以用来携带数据

Ÿ   在新Activity中可以获得意图对象以获取其中Bundle保存的数据

Ø  创建Activity获取返回数据

Ÿ   使用startActivityForResult(Intentintent, int requestCode) 方法打开Activity

Ÿ   重写onActivityResult(int requestCode, intresultCode, Intent data) 方法

Ÿ   新Activity中调用setResult(int resultCode, Intent data) 设置返回数据之后,关闭Activity就会调用onActivityResult方法

Ø  隐式意图创建Activity

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

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

 注意事项:

Ÿ   <intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动

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

Ÿ   <intent-filter>中的<action>、<category>、<data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动

如果一个意图可以匹配多个Activity,Android系统会提示选择

主MainActivity

	public void onClick(View view) {
		// 创建 意图对象,关联指定Activity类
		Intent intent = new Intent();

		// 显示意图
//		intent.setClass(getApplicationContext(), OtherActivity.class);
//		intent.setClassName(getApplicationContext(),"com.example.activity.OtherActivity" );// 参数:当前上下文, 类的全限定名
//		intent.setClassName("com.example.activity", "com.example.activity.OtherActivity");//参数:应用唯一标识,类的全限定名
		
		//隐式意图:
		//1.在设置setAction 的时候如果,后面会自动添加一个intent.addCategory("android.intent.category.DEFAULT");
		//也就是说在清单文件中必须要写上<category android:name="android.intent.category.DEFAULT" />才能匹配上
//		intent.setAction("android.intent.action.CALL");
//		intent.setData(Uri.parse("tel://18600001234"));
		
		intent.setAction("wuha");
		intent.addCategory("android.intent.category.DEFAULT");//可以不写会自动添加
		intent.setData(Uri.parse("qc://abc")); //这个android:scheme需要在清单文件中配置
		
		//同时设置Data和Type必须用setDataAndType一起的这个方法,分开的话 不行,因为setType会清空之前的setData
		//打开浏览器,也可以自己配置相对应的action和data来捕获
//		intent.setAction(Intent.ACTION_VIEW);
//		intent.setDataAndType(Uri.parse("http://192.168.1.99:8080/14.Web/"),"text/html");
		
//		intent.setAction(Intent.ACTION_VIEW);
//		intent.setDataAndType(Uri.parse("file:///mnt/sdcard/fbb.jpg"), "image/jpg");
		
		//尝试传递 一个数据到另外一个Activity
//		intent.putExtra("name", "张三");//传递字符串
//		intent.putExtra("age", 12);
		Person person = new Person(1,"tiancai",22,"man");
		intent.putExtra("person", person);
		startActivity(intent);
//		startActivityForResult(intent, 202);//	// 开启Activity, 等待结果, 当新开启的Activity关闭时, 会执行onActivityResult方法
	}
	
	 /*
     * requestCode	开启Activity时的请求码, 用来判断哪里开启的
     * resultCode	新Activity关闭后的返回码
     */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		Bundle bundle1 = data.getBundleExtra("bundle1");
		Bundle bundle2 = data.getBundleExtra("bundle2");
		String name1 =bundle1.getString("name");
		int age1 = bundle1.getInt("age");
		String name2 =bundle2.getString("name");
		int age2 = bundle2.getInt("age");
		resultTV.setText(name1+":"+age1+","+name2+":"+age2);
	}
	
OtherActivity

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other);
		
		TextView dataTV =(TextView) findViewById(R.id.dataTV);
		 /** Return the intent that started this activity. */
		Intent intent = getIntent();
		
//		String name = intent.getStringExtra("name"); //获取那边来的数据
//		int age = intent.getIntExtra("age", -1);
//		dataTV.setText(name+":"+age);
		
		Person person = (Person) intent.getSerializableExtra("person");
		dataTV.setText(person.toString());
		
		Intent resultIntent = new Intent();
		
		Bundle bundle1 = new Bundle();
		bundle1.putString("name", "lisi");
		bundle1.putInt("age", 22);
		Bundle bundle2 = new Bundle();
		bundle2.putString("name", "zhaoliu");
		bundle2.putInt("age", 23);
		resultIntent.putExtra("bundle1", bundle1);
		resultIntent.putExtra("bundle2", bundle2);
		
		setResult(315, resultIntent);
		
	}
	
	public void onClick(View view){
		finish(); //关闭当前Activity
	}
	
OtherActivity在清单中的配置

<activity
            android:name=".OtherActivity"
            android:label="@string/title_activity_main" >

            <intent-filter>
                <action android:name="wuha" />
                <action android:name="android.intent.action.CALL" />
                <action android:name="android.intent.action.VIEW" />

                <data android:scheme="qc" />
                <data android:scheme="tel" />
                <data
               		android:scheme="http"
                    android:mimeType="text/html"
                     />
                <data
                	android:scheme="file" 
                    android:mimeType="image/*"
                    />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值