Android学习笔记(2)——使用Intent在Activity间传递

本例将说明如何在不同的Activity间切换,并可借助Intent进行值的传递


Activity(一个Android程序由多个Activity组成):

布局文件res/layout/*.xml,前台页面布局

Activity类函数src/com*包/*.java,后台业务逻辑

AndroidManifest.xml程序配置文件,注册Activity


为了演示多个Activity间的切换,我们首先new几个Activity:

————————————————MainActivity:————————————————

布局(res/layout/activity_main.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="false"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />"
    
</RelativeLayout>

button的id为myButton,

TextView和Button的text属性赋值为R.java中对应string/hello_world键的值:(R.java记录了所有键值对的引用,包括布局layout,图片drawable,string键值等等,R.java不可手动更改其内容,在操作res下的文件时,系统自动生成

后台业务逻辑(src/com.example.activity_02.MainActivity.java):

package com.example.activity_02;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * 主Activity
 */
public class MainActivity extends Activity {

    private Button myButton=null;

    @Override
    /**
     * 重写onCreate
     */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);    //设置布局文件

        //根据R.java中登记的id查找控件
        myButton=(Button)findViewById(R.id.myButton );
        //绑定监听到button上
        myButton.setOnClickListener(new MyButtonListener());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    /**
     * button的点击监听类
     */
    class MyButtonListener implements OnClickListener{

        @Override
        public void onClick(View v) {

            //生成一个Intent对象
            Intent intent =new Intent();

            //附加数据Extras
            intent.putExtra("textIntent", "123");

            //Intent请求的是OtherActivity.class
            intent.setClass(MainActivity.this, OtherActivity.class);        
            MainActivity.this.startActivity(intent);

        }

    }

}

使用findViewById获取和设置页面布局中的控件(需要有id),

使用内部类的方式,设置button控件的点击事件监听setOnClickListener

重写button的Click事件,生成一个Intent对象,使用他的Extra附带一个键值对("textIntent","123"),设置要切换去的Activity是OtherActivity(稍后new),动作是startActivity启动另一个Activity,

Intent: 一个请求(包含很多信息)

  • Component name:决定去启动哪一个Activity
  • Action:启动了那个Activity之后,我要做什么
  • Data:从一个Activity想要向另一个Activity传送什么数据
  • Category:
  • Extras:额外信息(键值对),可从一个Activity传送到另一个Activity取出来
  • Flags:

配置文件AndroidManifest.xml

        <activity
            android:name="com.example.activity_02.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

注册MainActivity的信息(系统会默认生成主Activity的注册,并设置为启动Activity)


————————————————OtherActivity:————————————————

布局(res/layout/other.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    
</LinearLayout>

TextView的id为myTextView,

后台业务逻辑(src/com.example.activity_02.OtherActivity.java):

package com.example.activity_02;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 另一个Activity
 */
public class OtherActivity extends Activity {

    private TextView myTextView=null;
    
    @Override
    /**
     * 重写onCreate
     */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //设置布局文件,根据R.java中登记的layout布局文件id
        setContentView(R.layout.other);
        
        //获取由上一个Activity传递过来的Intent对象
        Intent intent=getIntent();
        //获取这个Intent对象的Extra中对应键的值
        String value=intent.getStringExtra("textIntent");
        
        //获取、设置TextView的文本值
        myTextView=(TextView)findViewById(R.id.myTextView);
        myTextView.setText(value);
        
    }

}

使用setContentView来设置布局文件,
在getIntent对象之后,获取Intent从上一个Activity传过来的键值"textIntent"的值,放在myTextView中,

配置文件AndroidManifest.xml

 

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

 

注册OtherActivity


启动ADV模拟器,运行效果如下:

点击MainActivity主界面中的button按钮,

 

显示另一个Activity界面,并显示从前一个界面传来的值"123"


不同的Activity间切换,可以是不同程序的不同Activity,例如修改主界面MainActivity中button点击处理如下:

    /**
     * button的点击监听类
     */
    class MyButtonListener implements OnClickListener{

        @Override
        public void onClick(View v) {

//            //生成一个Intent对象
//            Intent intent =new Intent();
//
//            //附加数据Extras
//            intent.putExtra("textIntent", "123");
//
//            //Intent请求的是OtherActivity.class
//            intent.setClass(MainActivity.this, OtherActivity.class);        
//            MainActivity.this.startActivity(intent);
            
            Uri uri=Uri.parse("smsto://0800000123");
            Intent intent =new  Intent(Intent.ACTION_SENDTO,uri);
            intent.putExtra("sms_body", "The SMS text");
            startActivity(intent);

        }

需要导入包import android.net.Uri;

重新Debug,效果如下:

当点击主界面MainActivity中的button后,程序跳转到发信息界面


 

 

posted on 2012-11-23 13:24  影天  阅读(17799)  评论(1编辑  收藏  举报

导航