美文网首页
Android - base - Activity

Android - base - Activity

作者: no_today | 来源:发表于2017-10-12 21:39 被阅读0次

    四大组件之活动

    大纲

    • 活动是什么
    • 创建活动流程
    • 活动间的跳转
    • 活动的生命周期
    • 活动的启动模式
    • 视图界面加载菜单栏Menu

    #活动是什么

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

    简而言之活动就是一个继承了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

    相关文章

      网友评论

          本文标题:Android - base - Activity

          本文链接:https://www.haomeiwen.com/subject/xfioyxtx.html