安卓实战开发Day04 2020.8.1

本文深入讲解了Android应用开发的关键概念,包括程序启动流程、Context的作用、页面跳转机制及数据传递方式,同时介绍了如何使页面对外共享,是Android开发者入门与进阶的实用指南。

内容

1.启动程序和启动Activity的流程
2.context的理解
3.页面跳转
4.如何将自己的页面共享出去

一.启动程序和启动Activity的流程12

二.context的理解

1.Context提供了访问系统资源的方法,可以理解为一个桥梁,设备和界面就是通过Context来连接的
2.Activity的context和applicationContext区别

大多数情况下可以相互使用,但是在设计界面跳转的时候,尽量使用activity的context(不绝对),因为它提供了任务栈,applicationContext没有提供任务栈

三.页面跳转

1.页面跳转分为显式跳转和隐式跳转

显式跳转一般是同一个程序不同页面之间,明确指定从哪个页面跳转到哪个页面
隐式跳转一般是不同程序之间界面的跳转,比如微信分享,比如打开系统提供的服务(电话,相机等等),因为根本不知道它们是啥类管理的,也不知道界面名字,很难明确指定,而是用action(和data)

2.返回界面的两种方式

①直接使用finish()删除
②也可以在Manifest种指定父activity

3.传递数据的两种方式

传递数据有两种方式,一种是通过intent,一种是bundle
1

MainActivity中


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        next.setOnClickListener {
            //明确指定从当前页面跳转到SecondActivity页面
            val intent = Intent(this,SecondActivity::class.java)

            /*//传递数据方式①
            //只能传递已有的数据类型
            intent.putExtra("name","jack")
            intent.putExtra("pxd","123")*/

            //传递数据方式②
            val bundle = Bundle()
            bundle.putString("name","jack")
            bundle.putInt("pxd",123)

            //开始跳转
            //startActivity(intent)
            //需要返回值的跳转
            startActivityForResult(intent,1)
        }
    }

    //如果要回调数据就要用这个方法,这个方法是系统自动调用的
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        //1.首先判断是是不是我请求的数据
        if(requestCode == 1){
            //判断处理结果,因为是不带数据的回调,所以直接判断resultCode
            if(resultCode == 1){
                Log.v("result","处理成功,${data?.getStringExtra("uid")}")
            }else{
                Log.v("result","处理失败")
            }
        }else{
            Log.v("result","不是我请求的数据")
        }
    }
}

secondActivity中


class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        /*方式①
        val name: String? = intent.getStringExtra("name")

        val password: String? = intent.getStringExtra("pxd")
        */

        //方式②
        val bundle = intent.extras
        val name: String? = bundle?.getString("name")
        val password: Int? = bundle?.getInt("pxd")

        //使用日志输出
        Log.v("pxd","$name 的密码是 $password")

        back.setOnClickListener{
            //回调结果,不带数据
            //setResult(0)

            //回调结果,有数据的
            Intent().apply {
                putExtra("uid","001")
                setResult(1,this)
            }

            //删除页面
            finish()
        }
    }
}

就会输出

处理成功,001

四.如何将自己的页面共享出去

①自己在需要共享的页面的Manifest中定义intent-filter

<intent-filter>
    <!--系统提供的行为-->
    <action android:name="android.intent.action.SEND"/>
    <!--自己定义的行为-->
    <action android:name="pxd.action.bala"/>

    <!--如果希望外部程序能够启动这个页面,必须设置category为default-->
    <category android:name="android.intent.category.DEFAULT"/>

    <!--如果希望外部启动这个界面的时候传递数据过来,则必须定义数据的格式-->
    <!--上面两个是必须的,而这个可以没有-->
    <data android:scheme="pxd"/>
</intent-filter>

②到时就外部程序就可以这样调用

button.setOnClickListener {
    Intent().apply {
        action = Intent.ACTION_SEND
        data = Uri.parse("pxd: 传过来的数据")
    }.also {
        startActivity(it)
    }
}

③到时候这样取得传递过来的数据

val content: String? = intent.data?.schemeSpecificPart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值