Android---(3),活动创建,intent对象

时间:2012/11/13

书籍:Beginning.Android.4.Application.Development

开发环境:eclipse


--一个项目通常包含多个活动(Activity),一个Activity由一个UI组件和一个java类文件来组成。可以用Intents来连接各个活动。

1.创建新活动

--要在项目中创建一个新的活动的步骤如下:
(1)在项目中添加一个类,类名随便,比如是SecondActivity.(默认如果在defaultPackage下面,应该要改到项目的Package下面)。
(2)往AndroidManifest.xml下面添加该活动的信息,如下:
<activity
android:label=”Second Activity”
android:name=”.SecondActivity” >
<intent-filter >
<action android:name=”net.learn2develop.SecondActivity” />
<category android:name=”android.intent.category.DEFAULT” />
</intent-filter>
</activity>

1.其中的net.learn2develop是包含项目的Package的名字。
2.其中android:name=“.SecondActivity”是新活动所关联的类的名字,这里类名是SecondActivity,相应的name就设置成了.SecondActivity了。
3.活动的intent-filter name 是net.learn2develop.SecondActivity,其他活动想要调用这个活动的话就要用这个名字。
4.活动的category是android.intent.category.DEFAULT,这个属性表明其他Activity可以用startActivity()来开始这个活动。
(3)然后在res/layout下面为新Activity创建一个xml文件。用于设置欣Activity的界面。
--可以简单的将原来的Activity_main.xml文件复制并重命名为secondactivity.xml。修改内容即可。
(4)在新创建的SecondActivity类中,让SecondActivity继承Activity类,并实现其中的onCreate()方法。如下:
package net.learn2develop.UsingIntent;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
}
}
其中setContentView方法加载了刚才新创的xml文件---在res/layout目录下的secondactivity文件。用于设置UI界面。注意加载的名字和xml文件名字要一致。而且xml文件不可以用大写字母。
(5)然后呢,在别的窗体(可以在项目中的main窗体中),创建一个入口,这里用简单的单机按钮的onClick方法进入第二窗体。在main窗口中添加一个按钮如下:
<Button
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Display second activity”
android:onClick=”onClick”/>
  当用户单击这个按钮的时候,在Activity_main中的onClick方法就会被调用。onClick方法如下:
public void onClick(View view)
{
startActivity(new Intent("com.example.secondActivity"));
}




startActivity接受一个intent类作为参数,指定要开始的活动,而intent类的构造方法使用活动的intent-filter name作为参数。安卓系统允许应用程序之间用intent-filter name来相互调用,而在同一个项目的内部还可以用如下写法来调用活动。
startActivity(new Intent(this, SecondActivity.class));




2.创建一个返回值的活动



---接下来学习如何创建一个返回值的活动。


(1)首先看看要怎么调用一个有返回值的活动,如下:
startActivityForResult(new Intent(
“net.learn2develop.SecondActivity”),
request_Code);


用startActivityForResult来调用有返回值的活动。需要传递一个request_Code(int类型),用于鉴别返回的是哪个活动的结果,可以在活动中设置不同的返回值来辨别不同的活动。Intent的构造方法里面是要调用活动的名字。
(2)返回值需要用一个Intent对象来传递。如下:
Intent data = new Intent();
//---get the EditText view---
EditText txt_username =
(EditText) findViewById(R.id.txt_username);
//---set the data to pass back---
data.setData(Uri.parse(
txt_username.getText().toString()));
setResult(RESULT_OK, data);
//---closes the activity---
finish();



1.首先要新建一个intent 类型的对象,此处为data。
2.然后通过intent对象的setData方法来将返回值装入intent对象里面
3.setResult方法设置一个result code(要么是RESULT_OK或者RESULT_CANCEL)和一个返回的对象给调用活动(此处返回的对象是intent)。
4.finish()用于关闭当前活动返回调用的活动。
(3)在调用的活动里面,要实现一个onActivityResult方法,此方法在被调用的活动返回的时候调用,如下:
public void onActivityResult(int requestCode, int resultCode,
Intent data)
{
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {
Toast.makeText(this,data.getData().toString(),
Toast.LENGTH_SHORT).show();
}
}
}




在这个方法里面,上一步中的data在这一步中返回,用data.getData()方法可以获得intent对象返回的信息。


3.用intent对象来传递数据(data)


--接下来学习如何用intent对象来传递数据。
(1)用intent或者bundle对象来传递数据
可以用intent对象的putExtra方法来存入要传递的对象,其参数是一对name/value的值,注意第一个name值要为string而value值可以为其他任何值,如下:
Intent i = new Intent("com.example.secondactivity");
i.putExtra(“str1”, “This is a string”);
i.putExtra(“age1”, 25);


亦可以用一个bundle对象来传递值,用法如下:
//---use a Bundle object to add new name/values pairs---
Intent i = new Intent("com.example.secondactivity");
Bundle extras = new Bundle();extras.putString(“str2”, “This is another string”);
extras.putString(“str3”,“this is a string inside intent !”);
extras.putInt(“age2”, 35);
//---attach the Bundle object to the Intent object---
i.putExtras(extras);


 
先创建一个intent对象,然后新建一个bundle对象,在bundle中添加name/value形式的数据,最后用intent对象的putExtra方法将bundle返回即可。
(2)用startActivityForResult方法来传入intent。如下:
startActivityForResult(i, 1);
在调用活动中用这个方法来调用被调用活动(已经在intent对象构造时设置好)。即可传入intent对象,以及里面的数据(在上一步中设置好)。
(3)在被调用的活动中获取intent里面的信息
在上一步中,用startActivityForResult(i,1)来传递了intent对象I到被调用活动中,而在被调用活动中可以用this.getIntent();来获得传递过来的intent对象,例如在某个方法中:
public void onClick2(View view)
{
Intent i=this.getIntent();
if(i==null) Toast.makeText(this, "intent is empty !", Toast.LENGTH_LONG);
else 
Toast.makeText(this, i.getExtras().getString("str3"), Toast.LENGTH_LONG).show();
}



如果在构造方法中this关键字也可以省略。然后在用i.getExtras获得intent里面的bundle(即一对一对的name/value数据),然后用getString(对于bundle对象或者getStringExtra(对于intent对象)以name作为索引即可查到对应的value的值(如果传入的是“str3”,返回的就是对应的字符串“this is a string inside intent !”)。如果要获得整形的value的话,则要用getIntExtra(“age1”, 0)(对于intent对象,后面的0是缺省值)或者直接getInt(对于bundle对象)。来获得相应的值。
(4)用intent 对象的setData来传递数据
--也可以用intent对象的setData方法来传递数据。如下:
//---use the setData() method to return some value---
i.setData(Uri.parse(
“Something passed back to main activity”));
setData用来传递intent准备要使用的对象(Usually, you use the setData() method to set the data on which an Intent object is going to operate),例如传入一个url就可以用intent来直接打开网页。
(5)用getData方法来获得setData传递的对象,具体如下:
//---get the result using getData()---
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值