Activity

Activity

Activity,直译过来就是“活动”。安卓设想移动应用由于常常涉及到应用程序间的交互,所以不应该以一个APP为原子单位,而是以Activity为单位,这样会更加高效、便捷,使得不同APP间的交互可以通过调用其Activity,而不是通过启动一个APP。通常,在安卓应用中,一个屏幕(界面)既为一个Activity,如启动广告界面、程序主界面等等,其中,那个主要的Activitymain Activity)是APP启动后第一个运行的Activity

1. Activity简介

所有的Activity都需要在mainfest配置文件中注册:在<application>标签下用<activity>标签进行声明,并且必须要有需要指出android:name属性,既Activity名称。(注意:若Activity所在包与<mainfest>标签中属性package一致时,则名称为.<Activity名称>;若为子包中,则需加上子包名

举例:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

2. Activity的四种状态

  • 运行状态:可随意交互状态
  • 暂停状态:可见,但无法交互,一般在APP弹出对话框时既是暂停状态。
  • 停止状态:APP停止运行时
  • 销毁状态:强行停止APP

3. Activity的生命周期

图片来源:https://www.jianshu.com/p/b5a72a741025

4. 创建Activity

  1. 创建自定义Activity类,继承自android.app.Activity
  2. 重写Oncreate方法
  3. 设置要显示的视图:setContentView(<布局文件,如R.layout.activity_main>)
  4. mainfests文件夹中的安卓全局配置文件中注册Activity

5. 启动和关闭Activity

主Activity需要配置,在APP启动时将自动启动。

  • 配置主Activity(唯一)

启动:在AndroidMainfest.xml中配置

在相应<Activity>标签下加入以下几行代码:

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

<action>:Activity响应什么动作

<category>:响应类型

intent:用以显示(我要启动xxx Activity)或隐式(我要启动能发邮件的Activity)的启动Activity

  • 手动启动Activity

    基本代码如下:

    //1. 创建Intent对象
    Intent intent = new Intent(<ThisActivity>.this, <NextActivity>.class);
    //2. 启动Activity
    startActivity(intent); 
    
  • 手动关闭Activity

    finish();
    
  • 刷新Activity

    onCreate(null)
    

6. Activity间的数据交换

依托于Intent使用Bundle进行数据交互

在这里插入图片描述

Bundle类似于mapkey-value形式保存。

在这里插入图片描述

存放数据:<Bundle>.putXXX(),XXX包括ByteCharCharSequence

提取数据:<Bundle>.getXXX()

存放数据基本步骤:

  1. 创建Intent

  2. 创建Bundle

  3. 存放数据

  4. Bundle放到Intent

    举例:

    //将输入的信息保存到Bundle中,通过Intent传递到另一个Activity当中并显示出来
    Intent intent = new Intent(MainActivity.this, AddressActivity.class);
    //创建并实例化一个Bundle对象
    Bundle bundle = new Bundle();
    bundle.putCharSequence("name", name);//保存姓名
    intent.putExtras(bundle);//将Bundle对象添加到Intent对象中
    startActivity(intent);//启动Activity
    

提取数据基本步骤:

  1. 获取Intent

  2. 获取Bundle

  3. 提取数据

    举例:

    Intent intent = getIntent();// 获取Intent对象
    Bundle bundle = intent.getExtras();// 获取传递的Bundle信息
    String name = bundle.getString("name");// 提取数据
    

7. 启动一个Activity,获取数据后返回

  1. 启动Activity时使用startActivityForResult(<Intent>,<int requestCode,请求码,作为标识>)

  2. 重写onActivityResult方法,该方法既获取数据后的回调方法。

  3. 在另一个Activity中:

    1. 存放数据到Bundle中:直接getIntent()获取Intent,而不是新创建一个Intent
    2. 使用setResult(<int 结果码>, <Intent>)
    3. 结束当前Activity

举例:

第一个Activity:用以启动第二个Activity,并处理返回结果。

package com.mingrisoft;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button= (Button) findViewById(R.id.btn);//获取选择头像按钮
        button.setOnClickListener(new View.OnClickListener() { //为按钮创建单机事件
            @Override
            public void onClick(View v) {
                //创建Intent对象
                Intent intent=new Intent(MainActivity.this,HeadActivity.class);
                startActivityForResult(intent, 0x11);//启动intent对应的Activity
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0x11 && resultCode==0x11){	//判断是否为待处理的结果
            Bundle bundle=data.getExtras();		//获取传递的数据包
            int imageId=bundle.getInt("imageId");	//获取选择的头像ID
            ImageView iv=(ImageView)findViewById(R.id.imageView);	//获取布局文件中添加的ImageView组件
            iv.setImageResource(imageId);	//显示选择的头像
        }
    }
}

第二个Activity:用以存放数据,并回调。

package com.mingrisoft;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class HeadActivity extends Activity {
    public int[] imageId = new int[]{R.drawable.touxiang1, R.drawable.touxiang2,
            R.drawable.touxiang3, R.drawable.touxiang4, R.drawable.touxiang5
           };   // 定义并初始化保存头像id的数组

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head);
        GridView gridview = (GridView) findViewById(R.id.gridView); 			// 获取GridView组件
        BaseAdapter adapter=new BaseAdapter() {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageview;							//声明ImageView的对象
                if(convertView==null){
                    imageview=new ImageView(HeadActivity.this);		//实例化ImageView的对象
                    /*************设置图像的宽度和高度******************/
                    imageview.setAdjustViewBounds(true);
                    imageview.setMaxWidth(158);
                    imageview.setMaxHeight(150);
                    /**************************************************/
                    imageview.setPadding(5, 5, 5, 5);				//设置ImageView的内边距
                }else{
                    imageview=(ImageView)convertView;
                }
                imageview.setImageResource(imageId[position]);		//为ImageView设置要显示的图片
                return imageview;	//返回ImageView
            }
            /*
             * 功能:获得当前选项的ID
             */
            @Override
            public long getItemId(int position) {
                return position;
            }
            /*
             * 功能:获得当前选项
             */
            @Override
            public Object getItem(int position) {
                return position;
            }
            /*
             * 获得数量
             */
            @Override
            public int getCount() {
                return imageId.length;
            }
        };

        gridview.setAdapter(adapter); 									// 将适配器与GridView关联
        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = getIntent();    //获取Intent对象
                Bundle bundle = new Bundle();    //实例化要传递的数据包
                bundle.putInt("imageId", imageId[position]);// 显示选中的图片
                intent.putExtras(bundle);    //将数据包保存到intent中
                setResult(0x11, intent);    //设置返回的结果码,并返回调用该Activity的Activity
                finish();        //关闭当前Activity
            }
        });

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值