创建新活动

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

1.创建新活动 --要在项目中创建一个新的活动的步骤如下:
(1)在项目中添加一个类,类名随便,比如是SecondActivity.(默认如果在defaultPackage下面,应该要改到项目的Package下面)。
(2)往AndroidManifest.xml下面添加该活动的信息,如下:
[html]   view plain copy print ?

  • <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>  

<activityandroid: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()方法。如下:   [java]   view plain copy print ?

  • 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);  
  • }  
  • }  

package net.learn2develop.UsingIntent;import android.app.Activity;import android.os.Bundle;public class SecondActivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.secondactivity);}} 其中setContentView方法加载了刚才新创的xml文件---在res/layout目录下的secondactivity文件。用于设置UI界面。注意加载的名字和xml文件名字要一致。而且xml文件不可以用大写字母。
(5)然后呢,在别的窗体(可以在项目中的main窗体中),创建一个入口,这里用简单的单机按钮的onClick方法进入第二窗体。在main窗口中添加一个按钮如下:
[html]   view plain copy print ?

  • <Button  
  • android:layout_width=”fill_parent”  
  • android:layout_height=”wrap_content”  
  • android:text=”Display second activity”  
  • android:onClick=”onClick”/>  

<Buttonandroid: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来相互调用,而在同一个项目的内部还可以用如下写法来调用活动。
[java]   view plain copy print ?

  • startActivity(new Intent(this, SecondActivity.class));  

startActivity(new Intent(this, SecondActivity.class));



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



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


(1)首先看看要怎么调用一个有返回值的活动,如下:
[java]   view plain copy print ?

  • startActivityForResult(new Intent(  
  • “net.learn2develop.SecondActivity”),  
  • request_Code);  

startActivityForResult(new Intent(“net.learn2develop.SecondActivity”),request_Code);

用startActivityForResult来调用有返回值的活动。需要传递一个request_Code(int类型),用于鉴别返回的是哪个活动的结果,可以在活动中设置不同的返回值来辨别不同的活动。Intent的构造方法里面是要调用活动的名字。
(2)返回值需要用一个Intent对象来传递。如下:
[java]   view plain copy print ?

  • 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();  

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方法,此方法在被调用的活动返回的时候调用,如下:
[java]   view plain copy print ?

  • 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();  
  • }  
  • }  
  • }  

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值可以为其他任何值,如下:
[java]   view plain copy print ?

  • Intent i = new Intent("com.example.secondactivity");  
  • i.putExtra(“str1”, “This is a string”);  
  • i.putExtra(“age1”, 25);  

Intent i = new Intent("com.example.secondactivity");i.putExtra(“str1”, “This is a string”);i.putExtra(“age1”, 25);

亦可以用一个bundle对象来传递值,用法如下:
[java]   view plain copy print ?

  • //---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);  

//---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对象,例如在某个方法中:
[java]   view plain copy print ?

  • 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();  
  • }  

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方法来传递数据。如下:   [java]   view plain copy print ?

  • //---use the setData() method to return some value---   
  • i.setData(Uri.parse(  
  • “Something passed back to main activity”));  

//---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传递的对象,具体如下:
[java]   view plain copy print ?

  • //---get the result using getData()---   
  • Toast.makeText(this, data.getData().toString(),  
  • Toast.LENGTH_SHORT).show();  

//---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、付费专栏及课程。

余额充值