安卓学习笔记 2 activity跳转与参数传递

1、activity介绍

1.1 activity的生命周期

 

1.2金字塔型的生命周期

1.3什么是intent

 Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求。

在这些组件之间的通讯中,主要是由Intent协助完成的。
Intent
负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。

因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的ActivitylistActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的ActivitydetailActivity)

跳转的实现

为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent)
将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入IntentdetailActivity则会根据此Intent中的描述,执行相应的操作。

 

实例1

第一步 建立两个页面的xml布局

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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转" />

</RelativeLayout><!--在第一个页面的布局文件新建一个id为btn1的按钮,这是之后要用的按钮-->
Activity_Other.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是第二个页面"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

}
//简要的说明第二个界面

第二步 建立跳转到的页面

Otheractivity.java 

package com.example.day2activity;

import android.app.Activity;
import android.os.Bundle;

public class OtherActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);//设置布局文件
    }

第三步 改写MainActivity.java

MainActivity.java
package com.example.day2activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    private Button btn1;//建立一个按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//设置布局
        btn1 = (Button) this.findViewById(R.id.btn1);//给按钮赋值
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override//给按钮增加点击属性
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MainActivity.this,
                        OtherActivity.class);/*建立一个intent,参数是两个页面*/
                startActivity(intent);//打开页面
            }
        });

    }

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

}

第四步 在androidmanifest声明

 

 

</activity>

<activity android:name=".OtherActivity"></activity>

2、activity的传值

Ø 1、通过Intent传递数据

Ø 2、通过静态变量传递数据

Ø 3、通过剪切板传递数据

Ø 4、通过全局变量传递数据

2.1、Intent传递

我们可以通过Intent类中的putExtra方法可以将简单的数据类型和序列化对象保存到Intent对象中,然后在目标的Activity中使用getXxx方法取出对应的数据

实例2:

第一步 建立布局文档

Layout_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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳转并传递数据" />

</RelativeLayout>
Layout_other.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

改写主activity

MainActivity.java
package com.example.day2intent;

import java.io.ObjectOutputStream.PutField;

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

public class MainActivity extends Activity {
    private Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = (Button) this.findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MainActivity.this,
                        OtherActivity.class);
                intent.putExtra("name", "刘帅康");
                intent.putExtra("age", 21);
                intent.putExtra("address", "合肥");
                startActivity(intent);

            }
        });

    }

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

}

建立跳转的activity

OtherActivity.java
package com.example.day2intent;

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

public class OtherActivity extends Activity {
    private TextView msg;
    private String name;
    private String address;
    private int age;
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        msg = (TextView)this.findViewById(R.id.msg);
        Intent intent = getIntent();
        name = intent.getStringExtra("name");
        address = intent.getStringExtra("address");
        age = intent.getIntExtra("age", 0);
        msg.setText("姓名:"+name+"\n"+"年龄:"+age+"\n"+"地址:"+address);
    }

}

Manifest添加

<activity android:name=".OtherActivity"></activity>

时间: 2024-08-27 00:11:15

安卓学习笔记 2 activity跳转与参数传递的相关文章

安卓学习笔记 3 activity参数传递

Android学习 Day3 Activity几种参数传递方式 Ø 1.通过Intent传递数据 Ø 2.通过静态变量传递数据 Ø 3.通过剪切板传递数据 Ø 4.通过全局变量传递数 昨天已经使用intent跳转并且传递数值 今天使用剩下的三种方式.传递变量. Ø 2.通过静态变量传递数据 使用Intent可以很方便在不同的Activity之间传递数据,这个也是官方推荐的方式,但是也有一定的局限性,就是Intent无法传递不能序列化的对象.我们可以使用静态变量来解决这个问题 首先在OtherAc

android开发学习笔记(三)Activity跳转以及传值

一:步骤: 1创建Intent对象,参数中指定将要跳转到的class 2通过Intent对象的putExtra()方法指定要传到下一个页面的数据.方法参数用键值对. 3通过调用startActivity(Intent intent)方法或者startActivityForResult(Intent intent,int requestCode)方法启动跳转. startActivtyForResult():Activity A跳转到Activity B,Activity B可以返回数据给Acti

安卓学习笔记(二)基本构件

1.Activity 一个Activity,通常是用户在某一个时刻,在设备上看到的单独的界面.一个应用程序通常含有多个Activity,用户可在期间进行切换.对用户而言,这就是程序的外观部分. Activity的生命周期:启动一个Activity可能会消耗大量资源.他可能会涉及到新建一个Linux进程.为UI对象申请内存空间.从UML布局填充所有对象,以及创建整个界面.为了避免这种浪费,Android通过ActivityManager来管理活动的生命周期. ActivityManager负责创建

【安卓学习笔记1】安卓基本组件Activity,Service,BoradCastReceiver,ContentProvider简介

因为博主以前学习过安卓的一点知识,所以学习笔记和别人不太一样. 博主的学习参考书籍是疯狂android讲义第二版.本系列博客都是记录学习笔记的. 因为博主平时还要上班,所以也就晚上有时间看书,写博客. 博主坚持每天看一个小时的书,记录一下随笔心得. 希望能给大家带来帮助. =========================================================================== 安卓的基本组件 =============================

安卓开发笔记——深入Activity

在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我们继续探索Activity,来了解下关于Activity任务栈和Activity四种启动模式的区别. 为什么需要了解关于Activity的任务栈,其实最直接的体现就是提高用户交互友好性. 举个例子,当我们去浏览一个新闻客户端的时候,我们进入了新闻详情页,在这个页面有相隔两条的新闻标题,当我们去点击这个标题的时

安卓学习笔记一

在学习安卓之前,首先要对编程平台有一定的了解,才会方便我们日后的操作,这里我用的是eclipse集成的安卓环境. 编写代码总的来说可以划分为两部分,一个是安卓语言如配置权限,设置样式,放置控件之类的,另一个是java语言,实现程序的功能.所以安卓的学习主要还是控件与安卓API的使用,而JAVA语言这里不再赘述. 至于创建安卓工程,只要能大概认识英语,也就知道过程中设置的具体是什么, 其中依次为设置工程名,安卓型号,创建ACTIVITY,设置工作目录,设置图标样式,设置ACTIVITY样式,设置a

安卓开发笔记——关于Activity生命周期的一些事情

温故而知新很重要,对于先前学过的东西,每一次回过头来看都有不一样的体会,要么理解更深了,要么理解更透彻了. 近来回顾了关于Activity的生命周期,参看了相关书籍和官方文档,有了不小的收获,在以前的认知上有了很大程度上的改善,在这里记录点东西. 先来看下经典生命周期图: 简单概要下: 1.当第一次调用一个Activity就会执行onCreate方法 2.当Activity处于可见状态的时候就会调用onStart方法 3.当Activity可以得到用户焦点的时候就会调用onResume方法 4.

Android 学习笔记之五 activity lanuch mode

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里.这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task. Activity一共有以下四种launchMode: 1.standard    默认的启动模式,在同一个任务栈统启动一个新的activity

安卓学习笔记---Activity

由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的activity类,得继承Activity,这是android的jar包里的. 我的理解他就是一个控件的容器,就是我们使用手机时看的的一个窗口.本身没有什么实质的内容.       每一个创建的activity都得在AndroidManifest.xml文件中注册一下. 都要重新onCreate方法.