Android - base - Activity

2017-10-12  本文已影响0人  no_today

四大组件之活动

大纲


#活动是什么

活动是一种可以包含用户界面的组件,主要用于和用户交互。

简而言之活动就是一个继承了Activity类的Java类,分层类似于Javaweb开发中的Controller层。


#创建活动流程

AppCompatActivity类:SDK向下兼容的Activity

  1. 创建一个Java类并继承AppCompatActivity类再重写onCreate()方法
  2. 创建一个布局文件(layout目录)
  3. AndroidMainfest文件中注册活动
<application
        ...>
        
       <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
</application>

#活动间的跳转

Context类:上下文,Activity类继承自Context类
Intent类:意图类

Intent 对象存取数据

intent.putExtra(String key, ... value); // 存储数据
intent.get...(String key);              // 取出数据
##Intent 显示启动活动
Intent intent = new Intent(Context, TargetActivity.class);
startActivity(Intent intent);
##Intent 隐式启动活动

action and category 中的内容同时匹配上Intent 目标活动才会响应

Intent intent = new Intent("com.example.cheng.app01.MY_ACTION");
// 默认的category值无需设置
intent.addCategory("com.example.cheng.app01.MY_CATEGORY");
startActivity(Intent intent);
##携带数据跳转活动

MainActivity.java

// 启动活动2
protected void startActivity02(View view) {
        Intent intent = new Intent(this, Activity02.class);

        // 存储数据
        String data = "Hello Activity02~";
        intent.putExtra("data", data);

        /**
         *  参数2:请求码
         */
        startActivityForResult(intent, 1);
}

/**
  * startActivityForResult()方法启动的活动销毁后的回调方法
  * @param requestCode 请求码
  * @param resultCode  处理结果
  * @param data        携带数据的Intent
  */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode) {
            case 1:
                if(resultCode == RESULT_OK) {
                    // 从intent对象获取回传的数据
                    String return_data = data.getStringExtra("return_data");
                    Log.d(TAG, "onActivityResult: return_data = " + return_data);
                }
        }
}

Activity02.java

// 销毁活动并传入数据
protected void finishActivity(View view) {
        Intent intent = new Intent();

        // 返回数据
        String return_data = "Hello MainActivity";
        intent.putExtra("return_data", return_data);

        /**
         *  参数1:处理结果码
         */
        setResult(RESULT_OK, intent);

        // 销毁当前活动
        finish();
}
##启动活动相关方法
启动活动且接收启动活动销毁后回传的数据
startActivityForResult(Intent intent, int requestCode);
↓
requestCode要唯一,启动活动销毁后会回调传入onActivityResult()方法,届时需要用请求码区分是哪个请求回传的数据。

启动活动
startActivity(Intent intent);

销毁活动
finish();

startActivityForResult()方法启动的活动销毁后的回调方法
onActivityResult(int requestCode, int resultCode, Intent data)

返回键回调方法
onBackPressed()

设置回传数据
activity.setResult(int resultCode, Intent intent)
resultCode会在onActivityResult方法中用到

#活动的生命周期

活动存储空间是栈结构:先进后出

活动状态

运行:与用户交互
暂停:未跟用户交互 且 未完全不可见
停止:完全不可见
销毁:默认返回既销毁

活动生命周期回调方法

完整生存期
  onCreate():活动第一次创建时调用
  onDestroy():活动销毁前调用

可见生存期
  onStart():由不可见变为可见时调用
  onStop():完全不可见时调用

交互生存期
  onResume():准备好与用户进行交互时调用
  onPause():系统准备去启动或恢复另一个活动时调用

停止变启动:
  onReStart():停止变运行之前调用

活动的生命周期

#活动的启动模式

启动模式配置

singleInstance:单独存放一个活动栈 适合被其他应用调用
singleTask:单例 但会使上层活动全部出栈
singleTop:除栈顶启动栈顶 启动其他重建实例
standard:每次创建新实例


#视图界面加载菜单栏Menu

  1. 首先需要一个菜单menu文件

填充菜单栏 填充 inflater

public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
}

定义菜单项点击事件 根据id

public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
                case R.id.main_menu_add:
                        // 单击事件逻辑
                        break;
                default:
        }
}

#结尾

参考 《Android 第一行代码 第二版

第一次认真写博客,加油~

我挥舞着键盘和本子,
发誓要把世界写个明明白白...
I

上一篇 下一篇

猜你喜欢

热点阅读