Android基础之使用Intent实现Activity跳转

Activity的功能定位
·Activity通常用于处理UI相关的操作,例如UI控件的加载,配置及响应等等。
·从理论上说,在Activity中可以完成所有任务的处理,包括下载文件等,但并不是最合适的做法。
应用程序的启动流程
1.系统将解析该应用程序的AndroidManifest.xml文件,尝试检索入口Activity;
2.运行入口Activity的程序,即Activity的Java类,并自动调用onCreate()方法,在onCreate()方法执行的过程中,setContentView()方法被调用,则setContextView()的参数对应的布局被加载,完成界面的初始化。

AndroidManifest.xml与系统组件
在Android系统中存在4个系统组件,分别是:Activity、Service(服务)、ContentProvider(内容提供者)、BroadcasetReceiver(广播接收者),这些系统组件将由Android系统对它们进行管理和维护,开发人员不需要,也

无权维护,但它们必须在AndroidMannifest.xml文件中的”application“节点下进行配置,通常称之为注册。
注意:BroadcastReceiver存在动态注册的方式,因此它不一定是在AndroidManifest.xml中注册的。

激活Activity
Activity作为Android中的系统组件,其实例的创建、销毁过程都是由系统完成的。
每次Activity被显示,都有可能是”创建实例 ->显示”或者是”实例已存在,直接显示”的过程,启动Activity,也被称为激活Activity。

注:即使某个Activity已被显示了,也就是实例已经被创建了,也可能因为系统资源不足时被系统销毁,所以在开发人员也无法知晓在某一时刻Activity的实例是否存在。

在Android中,激活系统组件需要使用Intent对象。
Intent(意图)在Android系统中主要用于:
- 激活系统组件;
- 在组件之间传递数据。
使用Intent激活Activity的步骤:
1、创建Intent对象,并通过构造方法Intent(Context packageContext,Class《?》 cls)设置需要激活的Activity;
2、调用startActivity(Intent intent)方法。

带返回值的Activity

这里写图片描述

在启动源中,需要调用startActivityForResult()方法激活新的Activity.
public void startActivityForResult(Intent intent,int requestCode)
参数: intent – 意图
requestCode —请求码(返回身份的标志)
当被启动的Activity返回结果时,启动源的onActivityResult()方法会被回调。
protected void onActivityResult(int requestCode,int resultCode,Intent data)
参数: requestCode – 请求码
resultCode – 返回结果编码
data – 意图对象

在被启动的Activity中,开发人员应该将数据添加(封装)到Intent对象中,并调用setResult()方法。
public void setResult(int resultCode,Intent data)

在被启动的Activity结束时,启动源中的onActivityResult()方法被回调,结束Activity可调用finish()方法。
public void finish()

关闭Activity
当开发人员确定Activity已经不需要再次使用时,可以调用finish()方法结束当前Activity。
当调用finish()方法时,Activity的onDestroy()方法会被回调,开发人员可以重写该方法,并在该方法中实现释放资源的相关代码。
protected void onDestroy()
当Activity被关闭时,如果它是通过startActivityForResult()方法激活的,则启动源(激活它的Activity)的onActivityResult()方法被回调。

开发人员也可调用finishActivity()方法关闭Activity。
public void finishActivity(int requestCode)
该方法并不用于关闭自身,而是关闭通过startActivityForResult()激活的Activity,由于startActivityForResult()激活的Activity可能有多个,所以能被该方法关闭的Activity也可以有多个,finishActivity()的参数即为调用startActivityForResult()时的参数requestCode。
如果requestCode可以匹配多个Activity,则这些Activity将被全部关闭。

关闭当前应用程序所有的Activity
定义一个应用程序级别的全局变量,使用集合类型记录下每个启动过的Activity,当需要全部关闭时,遍历该集合逐一关闭即可。

示例:
这里写图片描述

这里写图片描述

这里写图片描述

package com.example.result_code_activity;

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

public class MainActivity extends Activity {
    public static final int RESULTCODE = 9527;
    private TextView tvContent;
    private Button btnlogin;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnlogin = (Button) findViewById(R.id.button1);
        tvContent = (TextView) findViewById(R.id.textView1);

        OnClickListener btnOnClickListener = new btnOnClickListener();
        btnlogin.setOnClickListener(btnOnClickListener );
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == RESULTCODE && resultCode == RESULT_OK){
            String user = data.getStringExtra("user");
            tvContent.setText(user);

            tvContent.setVisibility(View.VISIBLE);
            btnlogin.setVisibility(View.GONE);
        }
    }
    private class btnOnClickListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, ScountActivity.class);
            startActivityForResult(intent, RESULTCODE);
        }

    }

}
package com.example.result_code_activity;

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

public class ScountActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scount);
        findViewById(R.id.btn_login_submint).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                EditText edLoginName = (EditText) findViewById(R.id.et_login_name);
                String userName = edLoginName.getText().toString();

                Intent intent = new Intent();
                intent.putExtra("user", userName);

                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }


}
<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/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="登录/注册" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_centerHorizontal="true"
        android:textSize="43sp"
        android:visibility="gone"
        android:text="TextView" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button1"
        android:layout_marginTop="60dp"
        android:src="@drawable/num18" />

</RelativeLayout>
<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=".ScountActivity" >

    <EditText
        android:id="@+id/et_login_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="16dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/et_login_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/et_login_name"
        android:layout_below="@+id/et_login_name"
        android:ems="10"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/btn_login_submint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/et_login_password"
        android:layout_marginTop="18dp"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btn_login_submint"
        android:layout_below="@+id/btn_login_submint"
        android:layout_marginTop="35dp"
        android:text="还没有账号?赶快注册一个吧!" />

</RelativeLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值