美文网首页
【Android 开发-kotlin】计算器+分享页面demo

【Android 开发-kotlin】计算器+分享页面demo

作者: 榆野铃爱 | 来源:发表于2020-09-10 19:29 被阅读0次

运行效果

  • 计算(同一应用页面跳转)


  • 分享(不同应用页面跳转)


  • 实现横屏


内容简概

一、搭建界面
二、实现界面之间跳转和传值
三、实现隐式跳转并回调数据
四、Activity生命周期——解决横屏数据丢失

具体内容

一、搭建界面

新建一个项目,在xml中拖动文本控件TextView和Number到界面中,设置链式处理和对应约束,使其在同一水平线上,给一些控件加上id,最后设置Number的textAlignment=center。


接着创建跳转页面DetailActivity,添加一个按钮,设置id


二、实现界面之间跳转和传值

MainActivity

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

        // 给按钮添加点击事件
        mNextBtn.setOnClickListener {
            Intent().apply {
                // 设置值
                putExtra("first",mFirst.text.toString().toInt())
                putExtra("Second",mSecond.text.toString().toInt())
                // 设置从哪个页面跳转到哪个页面
                setClass(this@MainActivity,DetailActivity::class.java)
                // 跳转
                startActivityForResult(this,123)
            }
        }
    }
    // 接收回调数据
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode==123){
            data?.getIntExtra("result",0).also {
                // 将结果赋值到TextView上
                mResult.text=it.toString()
            }
        }
    }
}

DetailActivity

class DetailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_detail)
        // 获取传递的数
        val first:Int=intent.getIntExtra("first",0)
        val second:Int=intent.getIntExtra("second",0)
        // 实现按钮的点击事件
        mCalculateBtn.setOnClickListener {
            // 开始计算
            val result:Int=first+second
            // 将结果回调给上一个页面
            Intent().apply {
                putExtra("result",result)
            }.also {
                setResult(0,it)
            }
            //返回上一页面
            finish()
        }
    }
}

三、实现隐式跳转并回调数据

  • 显式跳转是同一个应用中不同页面的跳转
  • 隐式跳转是不同应用之间的跳转
    这里我们准备另一个应用,即新建一个项目,添加一个TextView和Button


然后在manifest中添加配置


回到计算器应用的MainActivity中

// 分享按钮事件
mShareBtn.setOnClickListener {
        // 设置隐式跳转
        Intent().apply {
        action = "wxj.wechat"
        data=Uri.parse("content:今天完成了Activity的跳转,很棒!")
        }.also {
                startActivity(it,456)
        }
}

wechat应用接收传过来的数据(MainActivity)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        setContentView(R.layout.activity_main)
        // 获取传递过来的数据
        intent.data?.schemeSpecificPart.also {
            // 显示到TextView中
            mTextView.text=it
        }
        // 返回按钮
        mBack.setOnClickListener {
            // 回调数据
            Intent().apply {
                putExtra("shareResult","分享成功")
            }.also {
                setResult(1,it)
                finish()
            }
        }
    }
}

然后计算器应用显示一个弹窗

    // 接收回调数据
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode==123){
            // 详细计算页面
            data?.getIntExtra("result",0).also {
                // 将结果赋值到TextView上
                mResult.text=it.toString()
            }
        }
        else if (requestCode==456){
            // 分享页面
            data?.getStringExtra("shareResult").also {
                // 弹出一个提示框
                Toast.makeText(this,it,Toast.LENGTH_LONG).show()
            }
        }
    }

四、Activity生命周期——解决横屏数据丢失

按上述操作完成后还有一个问题,就是手机横屏旋转后,计算结果变成0,这是由于屏幕旋转会导致页面销毁重建,新建页面并没有发生点击事件导致的,针对这个问题,我们可以用一个文件保存这个值,需要时从文件调出。

【解决方法】在计算器应用的MainActivity的onCreate方法中增加

        // 获取保存的数据
        savedInstanceState?.getString("content","").also {
            mResult.text=it
        }

MainActivity增加以下方法

    // 界面被销毁时会调用这个方法 保存数据
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("content",mResult.text.toString())
    }

这样就能保留原来的计算结果。


不过还有个问题,就是wechat应用添加<data android:scheme="content"/>这条语句后,手机上就不显示该应用的图标了,百度了半天也没找到个所以然,如果路过大佬知道,希望可以指点一二。

相关文章

网友评论

      本文标题:【Android 开发-kotlin】计算器+分享页面demo

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