第一章 活动Activity

第一章 活动Activity

设置为主Activity

在AndroidManifest.xml中对应的Activity加入意图过滤器

        <activity android:name=".MainActivity">
            <!--设置为主Activity-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

按钮点击事件

设置好按钮

<!--id为唯一标志符,text为显示的字符-->
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button_1"
        android:text="Button1"/>

在Activity里面设置好响应事件

        //先生成一个Button,通过findid找到布局中对应的按钮
        Button button1 = findViewById(R.id.button_1);
        //然后设置点击监视器
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        //具体响应的事件
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });

意图

显式意图

Intent(Context packageContext, Class<?> cls)。这个构造函数接收两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个参数 Class 则是指定想要启动的目标活动,通过这个构造函数就可以构建出 Intent 的“意图”。然后用startActivity(),把传送过去

//先构建出了一个 Intent,传入 FirstActivity.this 作为上下文,传入 SecondActivity.class作为目标活动,这样我们的“意图”就非常明显了,即在 FirstActivity 这个活动的基础上打开 SecondActivity 这个活动。然后通过startActivity()方法来执行这个 Intent。
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);

隐式意图

它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的 action 和 category 等信息,然后交由系统去分析这个 Intent,并帮我们找出合适的活动去启动。

修改AndroidManifest.xml

在标签下配置的内容,可以指定当前活动能够响应的 action
和 category

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

在标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action,而标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category。

然后修改要执行这个意图的Activity
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);

直接将 action 的字符串传了进去,表明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action 的活动

内置隐式意图

打开网页

Intent.ACTION_VIEW,这是一个 Android 系统内置的动作, Uri.parse()方法,将一个网址字符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去

                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);

URI.parse(),比如要有完整的协议,比如http://这样他才能识别出这是一个网址,需要用浏览器来打开

拨打电话

Intent.ACTION_DIAL

                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);

活动传递数据

向下一个活动传递数据

//第一个activity存储到intent里面
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("键",)
//第二个activity先获得上一个的intent,然后获取intent数据
Intent intent = getIntent();
String data = intent.getStringExtra("键")
//如果要获取int类型的数值,用getIntExtra()

向上一个活动传递数据

  • MainActivity.class

startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活
动,用在上一个活动

//startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源,一般为1      
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
  • SecondActivity.class

setResult()这个方法非常重要,是专门用于向上一个活动返回数据的,接收两个参 数 , 第 一 个 参 数 用 于 向 上 一 个 活 动 返 回 处 理 结 果 , 一 般 只 使 用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用了 finish()方法来销毁当前活动。

Intent intent = new Intent();
intent.putExtra("test", "这是从SecondActivity返回的信息");
setResult(RESULT_OK, intent);
finish();
  • MainActivity.class

使用 startActivityForResult()方法来启动 SecondActivity 的,在 SecondActivity被销毁之后会回**调上一个活动的 onActivityResult()**方法,因此我们需要在 FirstActivity 中重写这个方法来得到返回的数据

onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传入的请求码(这里是1)。第二个参数 resultCode,即我们在返回数据时传入的处理结果(这里是RESULT_OK)。第三个参数 data,即携带着返回数据的 Intent。

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //这里是请求码
        switch (requestCode) {
            case 1:
                //这里是响应码
                if (resultCode == RESULT_OK) {
                    String returnData = data.getStringExtra("test");
                    Log.d("returnmes", returnData);
                }
                else
                    Log.d("returnmes", "没有收到resultCode");
                break;
            default:
                Log.d("returnmes", "没有收到requestCode");
        }
    }

生命周期

  • onCreat(),Activity第一次被创建时候调用,初始化操作,比如加载布局、绑定事件
  • onStart(),Activity由不可见到可见
  • onResume(),Activity成为返回栈栈顶,准备好和用户进行交互,(中断后)重新开始
  • onPause(),系统去启动或者恢复另一个Activity时候调用,只保留这个Activity关键数据,将一部分资源释放
  • onStop(), Activity完全不可见时候
  • onRestart(),由Stop转化为Start状态时调用,就是这个Activity被重新启动了
  • onDestroy(),这个Activity被销毁,释放内存img

常用重写方法

//按下返回键,后面必须带finish()才能实现关闭功能,按一下是不会自动实现的
onBackPressed() 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值