Kotlin-Android之Activity使用详解

编辑: admin 分类: Android 发布时间: 2021-11-29 来源:互联网
目录
  • Activity中Toast的使用
  • Activity中不使用findViewById()获取控件ID
  • Activity中使用菜单Menu
  • Activity中intent的使用
    • intent显式
    • intent隐式
    • intent数据的传递
      • 传递数据
      • 返回数据
      • 扩展
  • 参考

    Activity中Toast的使用

    Toast.makeText(this,"ADD",Toast.LENGTH_SHORT).show()
    // Toast.makeText(Activity,提醒字符,length_long|short 显示时常长|短)
    

    Activity中不使用findViewById()获取控件ID

    打开Gradle Scripts 在 build Gradle(Project:AppName)的dependecies中添加如下一段:

     classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    

    然后再在build gradle(Module:AppName:app)的 plugins 标签结束处添加如下一段:

    plugins {
       ...
    }
    apply plugin: 'kotlin-android-extensions'
    

    这样你就可以直接使用控件ID调用方法了,不再通过findViewById()获取了

     bt1.setOnClickListener{...}

    Activity中使用菜单Menu

    现在res目录下右键Directory下新建Menu目录,然后新建MainMenu文件,编辑如下代码:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/Add_item"
            android:title="ADD"/>
        <item
            android:id="@+id/Remove_item"
            android:title="Remove"/>
    </menu>
    

    返回MainActivity按Ctrl+O(Mac OS中是Control+O)重写onCreateOptionsMenu()和onOptionsItemSelected()方法

       override fun onCreateOptionsMenu(menu: Menu?): Boolean {
            menuInflater.inflate(R.menu.main,menu) //获取上面写好的资源文件
            return true
        }
    
        override fun onOptionsItemSelected(item: MenuItem): Boolean {
            when(item.itemId){
                   R.id.Add_item->Toast.makeText(this,"ADD",Toast.LENGTH_SHORT).show()
                   R.id.Remove_item->Toast.makeText(this,"REMONE",Toast.LENGTH_SHORT).show()
            }
            return true
        }
    

    Activity中intent的使用

    这里先新建一个IntentActivity,并在清单文件manifest中注册,一般会自动注册

     <activity android:name=".IntentMainActivity"> ...</activity>
    

    intent显式

     //先获取Intent对象,方法(当前的活动,跳转的活动) 
     val intent = Intent(this, IntentMainActivity::class.java)
     //开始跳转
     startActivity(intent)
    

    intent隐式

    intent隐式需要使用清单文件manifest中的action和category两个标签,你可以自行添加,action的name随意,第一个category的name需设置为default,第二个category的name随意

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

    返回MainActivity,编写以下代码:

     val intent = Intent("com.example.ACTION_START")
     intent.addCategory("com.example.activity.CATEGORY")
     startActivity(intent)
    

    intent数据的传递

    传递数据

    //MainActivity
    val intent = Intent(this, IntentMainActivity::class.java)
    //向该IntentActivity传输数据,putExtra(name,value)
    intent.putExtra("test_data", "显式intent")
    startActivity(intent)
    //IntentActivity
     //接受上一个activity传输的数据getStringExtra(name)
     val data = intent.getStringExtra("test_data")
    

    返回数据

    //MainActivity中修改startactivity()为startActivityForResult()
    val intent = Intent(this, IntentMainActivity::class.java)
    startActivityForResult(intent,1)
    
    //因为使用了startActivityForResult()方法,
    //在IntentActivity销毁之后会回调MainActivity的onActivityResult()方法,
    //所以我们需要重写onActivityResult来得到返回的数据
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            when(requestCode){
                1->if (resultCode== RESULT_OK){
                    val returnedData= data?.getStringExtra("data_return")
                    Log.d("MainActivity","returned data is $returnedData")
                }
            }
        }
        
    //IntentActivity中创建一个intent对象来传递数据
     val intent =Intent()
                intent.putExtra("data_return","hello,MainActivity")
                setResult(RESULT_OK,intent)
                finish()
    

    扩展

    intent不仅仅是可以跳转至你创建的Activity,还可以跳转至系统应用

    如浏览器:

     bt3.setOnClickListener {
                val intent = Intent(Intent.ACTION_VIEW)
                intent.data = Uri.parse("https://www.baidu.com")
                startActivity(intent)
    

    如跳转至电话:

     bt4.setOnClickListener {
                val intent = Intent(Intent.ACTION_DIAL)
                intent.data = Uri.parse("tel:10010")
                startActivity(intent)
    

    参考

    [1]郭霖.第一行代码 Android[M].第三版.北京.人民邮电出版社.2020.

    到此这篇关于Kotlin-Android之Activity使用详解的文章就介绍到这了,更多相关Kotlin-Android之Activity使用内容请搜索海外IDC网以前的文章或继续浏览下面的相关文章希望大家以后多多支持海外IDC网!

    【来源:http://www.nextecloud.cn/hk.html 转载请保留连接】