安卓四大组件之activity笔记

活动activity

启动时的默认活动界面

  • 在活动中编写了MainActivity后,需要再AndroidManifest.xnl文件中对其进行设置为启动后的默认活动进程,设置属性如下。

    <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
    </activity>
    
  • 给活动加载一个布局文件:

    setContentView(R.layout.main_layout);
    
  • 设置点击侦听

    Button bt1 = (Button) findViewById(R.id.button_1);
    bt1.setOnClickListener(new View.OnClickListener() {
        ……
    }
    
  • 吐司的使用

    Toast.makeText(MainActivity.this, "你好", Toast.LENGTH_SHORT).show();
    

为启动时界面添加菜单栏

销毁当前活动界面

  • 返回按钮
  • 使用finish()函数

显式启动另一个活动

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);

隐式启动另一个活动

隐式启动本程序的活动

  • 首先在AndroidManifest.xml文件中设置对应的action name

    <activity android:name=".SecondActivity">
        <intent-filter>
            <action android:name="code.dage.com.a02_activity.ACTION_START" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    
  • 上所示设置好对应的参数后,在对应的调用启动隐式活动的位置处,添加以下代码

    Intent intent = new Intent("code.dage.com.a02_activity.ACTION_START");
    startActivity(intent);
    
  • 也可以使用category也对属性进行限定,必须category与action都匹配才能启动另一个活动

    intent.addCategory("code.dage.com.aa");
    <category android:name="code.dage.com.aa" />
    
  • 另外这些category与action可以设置多个来进行匹配

使用隐式来启动其他程序的活动

启动网页

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
  • 隐式启动有一个好处,可以在多个程序里面选择,比如打开浏览器的程序,可以出现多个应用来挑选而不是指定的应用。

    <activity android:name=".ThirdActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
        </intent-filter>
    </activity>
    

在上述代码对应的活动添加到程序后,也会响应前面启动网页的事件

活动之间数据传递

向下一个活动传递数据

  • 发送
    String date = “nice to meat you”;
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra(“date”, date);
    startActivityForResult(intent, 1);

  • 接收

    Intent intent = getIntent();
    String date = intent.getStringExtra("date");
    Toast.makeText(SecondActivity.this, date, Toast.LENGTH_SHORT).show();
    

向上一个活动返回数据

  • 发送

    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.putExtra("date", "xixi");
            setResult(RESULT_OK, intent);
            finish();
        }
    });
    
  • 接收

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if(resultCode == RESULT_OK) {
                    String date = data.getStringExtra("date");
                    Toast.makeText(MainActivity.this, date, Toast.LENGTH_SHORT).show();
                }
        }
    }
    

其中,这个发送是点击了按钮事件后使用finish()来销毁当前活动回到上一个的活动界面,并且在按钮事件中添加了携带的数据,里面的:

setResult(RESULT_OK, intent);

为返回的处理结果,一般为RESULT_OK或RESULT_CANCELED。当然,intent.putExtra依旧是携带的数据。

在上一个进程中启动这个有返回信息的活动时使用的是:

startActivityForResult(intent, 1);

启动1表示的标识符

在上一个进程中重写了onActivityResult方法,这个方法有三个参数,分别表示刚刚传递过去的标识符,返回的处理结果,携带的数据等,先判断后处理。

还可以使用点击返回键来实现回到上一个活动界面,如果使用返回键,那么把刚刚在点击按钮事件的处理放置在重写返回键的方法中。

onBackPressed();

活动的生命周期

活动的启动模式

设置位置

<activity android:name=".MainActivity"
        android:launchMode="singleTop"
        >

standard

活动的默认启动模式,可以在当前活动的基础上,把当前活动压栈,新建一个当前活动进入栈顶。

singleTop

如果当前活动在栈顶,那么新建一个当前活动时不会把它压栈新建活动。而是直接使用该活动。

singleTask

只允许栈中最多只存在一个活动的实例,即便这个活动不在栈顶,在新建活动时也不会重新创建,而是直接使用该活动,并且,把栈中该活动以上的所有活动全部出栈。

singleInstance

该模式创建的活动单独占据一个返回栈,方便对这种单独的一个活动别的程序调用。

获得当前活动的类名

    getClass().getSimpleName();

返回的是一个字符串形式的类名
如果查看某个工程文件,可以新建一个activity,这个activity没有具体的活动界面显示,在里面重写onCreate方法,在方法中把上述代码使用log之类的形式进行打印出来,然后让所有的activity继承这一个activity,那么在每个活动打开时都会打印对应类名的Log信息。

对调用当前活动所需的数据进行封装

在当前活动中编写如下代码

public static void actionStart(Context context, String date1, String date2) {
    Intent intent = new Intent(context, ThirdActivity.class);
    intent.putExtra("param1", date1);
    intent.putExtra("param2", date2);
    context.startActivity(intent);
}

那么在别的活动中启动当前活动时,只需要一行代码就可以完成对当前活动的启动与数据传递

ThirdActivity.actionStart(MainActivity.this, "Hello", "DaGe");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值