当前位置: 代码迷 >> Android >> android学习札记-33_为应用添加多个Activity与参数传递
  详细解决方案

android学习札记-33_为应用添加多个Activity与参数传递

热度:27   发布时间:2016-05-01 10:55:01.0
android学习笔记---33_为应用添加多个Activity与参数传递
33_为应用添加多个Activity与参数传递
------------------------------------------
1.一个activity代表一个的窗口,那么一个应用中往往会有很多的窗口
  因而就有可能有多个activity.
----------------------------------------
2.在一个Activity中可以使用系统提供的startActivity(Intent intent)方法打开新的Activity,在打开新的Activity前,你


可以决定是否为新的Activity传递参数:


第一种:打开新的Activity,不传递参数
public class MainActivity extends Activity {
  @Override protected void onCreate(Bundle savedInstanceState) {
.......
Button button =(Button) this.findViewById(R.id.button);
                           button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的


Activity
public void onClick(View v) {
                          //新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
   startActivity(new Intent(MainActivity.this, NewActivity.class));
}});
         }
}
---------------------------
3.第二种:打开新的Activity,并传递若干个参数给它:
public class MainActivity extends Activity {
  @Override protected void onCreate(Bundle savedInstanceState) {
.......
button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity
         public void onClick(View v) {
          Intent intent = new Intent(MainActivity.this, NewActivity.class)
Bundle bundle = new Bundle();//该类用作携带数据
bundle.putString("name", "传智播客");
bundle.putInt("age", 4);
intent.putExtras(bundle);//附带上额外的数据
startActivity(intent);
}}); }
}
在新的Activity中接收前面Activity传递过来的参数:
public class NewActivity extends Activity {
            @Override protected void onCreate(Bundle savedInstanceState) {
    ........
    Bundle bundle = this.getIntent().getExtras();
    String name = bundle.getString("name");
                    int age = bundle.getInt("age");
            }
}
----------------------
1.通过例子来说明
------------------------
  项目内容:当在MainActivity中点击按钮后,打开新的Activity,在新的Activity中
           显示:我是新Activity
-------------------------
2.注意新建一个activity的xml文件,命名的时候不要命名成:otherActivity.xml这样
  不会在R文件中生成.
------------------------------------
3.通过这个方法就可以显示界面:
 a.在android中如何打开activity组件,需要用到意图,Intent,是用来激活组件
   还有一个作用是附带数据.
 b.Intent intent=new Intent();
------------------------------------------------
4.activity之间传输数据:
  a.在MulActivity.java中
Intent intent=new Intent();
    //第一种方法: intent.setClass(this, OtherActivity.class);//设置要激活的组件
//第二种方法: intent.setClassName(this, "com.credream.mulActivity.OtherActivity");
    //第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
    //第二个是要激活的组件,从意图中得到组件进行激活
     //第四种做法:intent=new Intent(this,OtherActivity.class);
    intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");//可以用于跨应用


来激活组件
   //这几种方法,都是显式意图,因为都指定了类的路径等.
    //跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
    //指定其他应用的包名就行了
   //这个意图对象是可以用来给另一个activity进行参数的传递
//   intent.putExtra("company", "创梦网络");
//    intent.putExtra("age", 4);
//    传递参数的另一种方法
Bundle bundle=new Bundle();
bundle.putString("company", "CSDN");
bundle.putInt("age",10);
//适合参数的批量添加
intent.putExtras(bundle);
//意图对象中,底层源码,也是采用Bundle 来保存数据的
//if(extras==null){
// extras=new Bundle();
//}
//extras.putAll()
    startActivity(intent);
------------------------------------------
 b.接收OtherActivity.java
package com.credream.mulActivity;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
//activity是一个组件,而组件要配置在清单文件中
public class OtherActivity extends Activity
{


@Override
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
super.onCreate(savedInstanceState);
Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
//String company=intent.getStringExtra("company");//就可以提取字符串的参数
//int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
//另一种得到参数的方法
Bundle bundle=intent.getExtras();
String company=bundle.getString("company");
int age=bundle.getInt("age");
TextView textView= (TextView)this.findViewById(R.id.textView);
textView.setText("公司名字:"+company+",成立"+age+"年了...");
//运行项目,可以看到已经把参数传递过去了
}


}
---------------------------------
4.当关闭一个activity的时候,把数据传给创建它的前一个activity的方法
  这个方法放到下面的代码中实现.
----------------------------------------
5.创建MulActivity项目
-----------------------
a./MulActivity/src/com/credream/mulActivity/MulActivity.java
  package com.credream.mulActivity;




import android.app.Activity;


import android.content.ComponentName;


import android.content.Intent;


import android.os.Bundle;


import android.view.View;


import android.widget.Toast;




public class MulActivity extends Activity {
  
  /** Called when the activity is first created. */
  
  @Override
   
 public void onCreate(Bundle savedInstanceState) {
 
       super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
   
 public void openActivity(View e){
  
  Intent intent=new Intent();
   
 //第一种方法: intent.setClass(this, OtherActivity.class);
//设置要激活的组件


//第二种方法: intent.setClassName(this,"com.credream.mulActivity.OtherActivity");
    
//第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
   
//第二个是要激活的组件,从意图中得到组件进行激活
     //第四种做法:intent=new Intent(this,OtherActivity.class);
  


  intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");
//可以用于跨应用来激活组件
  
 //这几种方法,都是显式意图,因为都指定了类的路径等.
   
 //跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
    
//指定其他应用的包名就行了
  
 //这个意图对象是可以用来给另一个activity进行参数的传递


//   intent.putExtra("company", "创梦网络");


//    intent.putExtra("age", 4);


//    传递参数的另一种方法
Bundle bundle=new Bundle();


bundle.putString("company", "CSDN");


bundle.putInt("age",10);
//适合参数的批量添加
intent.putExtras(bundle);


//意图对象中,底层源码,也是采用Bundle 来保存数据的


//if(extras==null){


// extras=new Bundle();
//}


//extras.putAll()


//---------------------------- 
 
//startActivity(intent);


//----------------------------


//当需要接收打开的activity传回来的参数的时候
startActivityForResult(intent, 200);


//用这个可以获得新的activity返回的数据


//第二个参数是请求码:请求码的作用是:告诉MulActivity,在它的代码的什么地方发出的一个请求


//比如,在新的activity中给删除操作命名一个请求码=1,给添加操作一个请求吗=2,然后


//MulActivity就可以根据请求码,判断这个结果是来自于什么操作,删除还是添加.


//requestCode的作用是:请求码,作用是,告诉
    
    }
   
 /**
     
* 用来得到对方所返回的数据,系统在得到otherActivity返回的数据的时候
  
   * 会调用onActivityResult方法,来把数据返回给程序员
  
   * int requestCode, int resultCode, Intent data
   
  * requestCode请求码,resultCode结果码,返回的数据:是一个意图对象
    
 * requestCode,告知在什么地方发起的请求
   
  * resultCode,告诉MulActivity,otherActivity在什么地方返回的数据
  
   * 
    
 */

@Override


protected void onActivityResult(int requestCode, int resultCode, Intent data)
{


String result=data.getStringExtra("result");

Toast.makeText(this, result, 1).show();

super.onActivityResult(requestCode, resultCode, data);


}
}
------------------------------------------------
b./MulActivity/src/com/credream/mulActivity/OtherActivity.java
   package com.credream.mulActivity;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
//activity是一个组件,而组件要配置在清单文件中
public class OtherActivity extends Activity
{


@Override
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
super.onCreate(savedInstanceState);
Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
//String company=intent.getStringExtra("company");//就可以提取字符串的参数
//int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
//另一种得到参数的方法
Bundle bundle=intent.getExtras();
String company=bundle.getString("company");
int age=bundle.getInt("age");
TextView textView= (TextView)this.findViewById(R.id.textView);
textView.setText("公司名字:"+company+",成立"+age+"年了...");
//运行项目,可以看到已经把参数传递过去了
}

public void closeActivity(View v){
//在关闭之前要设置返回数据
Intent data=new Intent();
data.putExtra("result", "国荣和张晓晓在小树林..");
setResult(30,data);//返回的结果码和返回的数据
//resultCode结果码的作用是为了告诉创建这个activity的
//MulActivity,返回的结果数据是来自于这个activity的什么地方
finish();//关闭Activity(关闭窗口)
}


}
----------------------------------------------
c./MulActivity/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
<Button
    android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button"
android:onClick="openActivity"
    />
</LinearLayout>
--------------------
d./MulActivity/res/layout/other.xml
  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/content"
        android:id="@+id/textView" />
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
   android:text="@string/closebutton"
 android:onClick="closeActivity"       
        />
</LinearLayout>
--------------------------------
e./MulActivity/res/values/strings.xml
  <?xml version="1.0" encoding="utf-8"?>
<resources>


    <string name="hello">Hello World, MulActivityActivity!</string>
    <string name="app_name">MulActivity</string>
     <string name="button">打开新的Activity</string>
      <string name="title">新的Activity</string>
       <string name="content">我是新的Activity</string>
          <string name="closebutton">关闭Activity</string>


</resources>
------------------------------------
  相关解决方案