• Android学习路-activity活动


    activity即活动,是一种包含用户界面的组件,用于与用户进行交换
     
    创建activity类
    1.类继承Activity, activity传递一个bundle对象,可以获得onSaveInstanceState(Bundle outstate)保存的Bundle对象
    onSaveInstanceState(Bundle outstate)在程序置后台、或跳转到另一个activity,以及被系统回收时都会调用该方法
    onSaveInstanceState(Bundle outstate)重写的一个例子如下:
    @Override
    public void onSaveInstanceState(Bundle bundlestatue){
        super.onSaveInstanceState(bundlestatue);
        Log.i("firstActiviy","正在调用保存bundle的内容");
        bundlestatue.putString("testsavainstancestate","testsavainstancestate_value");
    }
    2.重写onCreate方法
    3.onCreate方法中为活动设置布局:setContentView(R.layout.layout名);
     
    一个创建activity的例子
    public class SecondActivity extends Activity{
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.secondlayout);
            Log.i("SecondActivity","启动第二个activity");
            String activity1=getIntent().getStringExtra("data");
            Log.i("SecondActivity","从前一个activity带来的数据:"+activity1);
        }
    AndroidManifest.xml文件中注册 activity
              1.使用标签<activity></activity>
              2.属性android:name=".xxactivity名字",名字使用.实际是省略了包名,因为<manifest>中已经定义了package名字
              3.指定主活动的activity,即启动app时展示的界面,<activity>中增加下面的内容
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
                        
    注册主activity的例子
    <activity android:name=".ActivityTest">
    
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     
    创建布局layout文件
    布局是XML文件,在res->layout目录下,New->Layout resource file
    定义id语法(@后加+号表示创建):@+id/id名字
     
    然后activity设置布局时可以使用刚创建的布局文件setContentView(R.layout.layout名);
     
     
    activity之间交互
    一、activity跳转
    1.显示调用
    Intent intent=new Intent(ActivityTest.this,SecondActivity.class);
    startActivity(intent);
     
    说明:
    1.1定义Intent对象,第一个参数为当前的activity,第二个为要跳转到的activity的名字加.class
    1.2.startActivity(intent)跳转,传递一个Intent对象
               
     
    2.隐式调用
    activity在AndoridManifest.xml中的注册指定<intent-filter>的action和category(默认是DEFAULT)
    <activity android:name=".SecondActivity">
    <intent-filter>
    <action android:name="android.intent.action.ACTION_START"></action>
    <category android:name="android.intent.category.DEFAULT"></category>
    </intent-filter>
    </activity>
     
    activity中隐式调用方法如下:
    Intent intent=new Intent("com.example.sunmin.ACTION_START");
    startActivity(intent);
                   
    说明:
    2.1.AndoridManifest.xml中注册activity,指明action的android:name。如果需要category也可以加上
    2.2.定义Intent对象,传递参数为active注册的android:name
    2.3.如果需要过滤Category,可以用下面方法做过滤 intent.addCategory("com.example.sunmin.TESTcategory");
     
     
     二、activity传递数据到下一个activity
    第一步:调用方,在Intent对象中传递数据 intent.putExtra("key的名字","key的数据");
    第二步:被打开的activity,获得调用方传递的数据,getIntent()获得用于启动activity的intent
    String data=getIntent().getStringExtra("key的名字");
     
    getStringExtra():获得字符串
    getIntExtra():获得整型数据         
    getBooleanExtra():获得布尔型数据         
           
     
    三、返回数据给上一个activity
    第一步:第1个activity通过startActivityForResult(intent,1);启用第2个activitystart
    ActivityForResult(),第一个入参为启用的activity,第二个为请求的requestCode
     
    第二步:第2个activity使用setResult(RESULT_OK, intent);
    setResult(),第一个参数为resultCode返回值,第二个参数为传递data的intent
    被activitystartActivityForResult()启动的activity销毁finish()时,会回调第一个activity的onActivityResult()方法
     
    第三步:第1个activity重写onActivityResult()来处理
    因为可能要监测多个activity回调的数据,所以可以使用requestCode来区别不同的activity
    销毁activity2时的数据
     
    @Override
    public void onActivityResult(int requestCode,int resultCode,Intent data){
        switch (requestCode){
            case 1:
                if (resultCode==RESULT_OK){
                    String returndata=data.getStringExtra("data2");
                    Log.i("activity1","这是我从第二个activity回调的内容:"+returndata);
                }
                break;
            default:
        }
    
    }
    activity生命周期
    onCreate
    启动一个新的activity,新建活动时调用
     
    onStrat
    打开activity,活动由不可见变为可见时调用
     
    onResume
    活动已显示,准备好可以与UI交互时调用,此时活动处于栈顶
     
    onPause
    系统准备打开另一个activity时调用,此时会释放一些资源。dialog弹框弹出的时候会调用这个方法
     
    onStop
    活动由可见变为不可见时调用
     
    onDestory
    活动被销毁时调用,然后状态变为销毁
     
    onRestart
    活动由停止变为启动状态时调用
     
    activity活动的启动模式
    activity有一个活动栈来管理activity,展示栈顶的activity,销毁activity(调用finish()方法)时会从栈里将activity移除
     
    在AndroidManifest.xml定义,注册activity时配置的【android:launchMode】属性         
     
    standard
    默认的启动模式,每次创建activity,都会新建一个放到活动栈,即使重复的也会再新建一个活动
     
    singleTop
    与standard相比,如果栈顶已经是要创建的activity,则不会创建新的activity。如果不在栈顶则新建一个活动
     
    singleTask
    如果活动栈中存在要创建的activity,则将activity上的所有栈onDestroy出栈,调用要创建activity的instant()方法放到栈顶
     
    singleInstance 
    activity放在一个单独的栈中,所有要创建这个activity的活动都直接调用这个栈的栈顶。(所以如果调用方按返回,会先从他自己的栈一级一级出栈,不会直接调用到这个创建的activity)
     
  • 相关阅读:
    如何快速取得股票交易历史数据
    ArcSDE性能优化系列之ArcSDE参数篇
    2020年8月29日
    2020年8月31日
    9.2
    2020年8月25日
    2020年8月30日
    2020年8月27日
    2020年8月26日
    2020年8月28日
  • 原文地址:https://www.cnblogs.com/meitian/p/7110801.html
Copyright © 2020-2023  润新知