首页 > 其他分享 >Android中启动Activity的最佳写法

Android中启动Activity的最佳写法

时间:2023-06-14 17:23:22浏览次数:35  
标签:packageName Activity MainActivity reason intent 跳转 Android 写法

问题思考

在实际工作场景中,大家各个模块都是有交互的,那么就存在各个模块Activity的相互跳转。假设小A负责一个ActivityA,所有跳转到ActivityA的请求都需要携带String类型的参数resaon,那么每一个对接跳转到ActivityA的业务,小A都要说一遍:“跳转过来需要带一个参数reason”,很明显这种工作效率是很低的。而且更为麻烦的是,如果小A这里的业务变了,除了reason参数还需要额外传递一个packageName参数,那么怎么更简单有效的告知所有跳转过来的用户呢?

解决方案

ActivityA中定义一个跳转到自身的公共方法。

代码实现

假设现在有一个核心Activity:MainActivity.kt

class MainActivity : AppCompatActivity() {

    companion object {
        //@JvmStatic
        fun startSecondActivity (context: Context, reason: String, packageName: String) {
var intent = Intent(context, MainActivity::class.java) intent.putExtra("reason", reason) intent.putExtra("packageName", packageName) context.startActivity(intent) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val param1 = intent.getStringExtra("reason") val param2 = intent.getStringExtra("packageName") Log.d("MainActivity", "reason: $param1 packageName: $param2") } }

现在有一个UserActivity要跳转到MainActivity

class UserActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val btn = findViewById<Button>(R.id.btn)
        btn.setOnClickListener {
            SecondActivity.startSecondActivity(this, "pass", "com.security.user")
        }
    }
}

可以看到我们在MainActivity通过companion object定义了一个"静态方法",任何要跳转到MainActivity的Activity,只需要调用startSecondActivity方法即可,按照方法定义要求传入对应的参数,即可实现Activity跳转规则的标准化。

注意事项

需要注意的是:如果你的UserActivity不是kotlin类,而是java类,那么你就不能直接用类名调用方法:SecondActivity.startSecondActivity。因为Kotlin知道companion object中的函数,因此可以直接在类上调用它,而Java对此一无所知。解决方法是在方法上使用@JvmStatic注解,这样Java类中的代码就可以识别该方法为"静态方法"。

 

标签:packageName,Activity,MainActivity,reason,intent,跳转,Android,写法
From: https://www.cnblogs.com/shibin90/p/17480837.html

相关文章

  • 超强新框架,引领Android开发新时代.
    2019年,Compose在GoogleIO大会横空出世,大家都议论纷纷,为其前途堪忧。今年7月Compose1.0的正式发布,却让大家看到了Google在推广Compose上的坚决,这也注定Compose会成为UI开发的新风向。为什么要用Compose?师兄Flutter大行其道,Compose这个师弟又有什么让人选择它的理由呢?其实二者实现......
  • 新版android studio无法新建java源码工程解决
    辣鸡股沟又特么一刀切了,新建的asandroid项目没法选java语言,默认就是kotlin,而且没有地方设置,具体解决办法是:在新建project的时候不要选EmptyActivity(会默认启用kotlin,无法选择java);可以选择如下图标红的1,2两种模版(NoActivity,EmptyViewsActivity)来新建项目,前者没有a......
  • 一个android文本比对app的实现(二)--界面
    <spanstyle="font-family:Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);">继上一篇博文大致介绍了这一简单但有点用处的app后(详情:</span><spanstyle="color:rgb(51,51,51);font-family:Arial;font-size:14px;line-height:26px;b......
  • 一个android 文本比对App的实现(一)
    做c++开发很多年了,从早年windowsvc6.0做客户端程序开发,这些年后台流媒体服务器后台开发。随着时代变迁,移动互联逐渐兴起,直到现在,移动互联的风头早已盖过传统互联网应用,因而传统后台开发似乎日渐式微。如今要找工作的话,android,IOS等开发的职位不但数量远远多于c++,而且报酬也要比c+......
  • android Button组件的属性和方法
    androidButton组件的属性和方法   一、相关属性     二、相关方法 setClickable(booleanclickable)设置按钮是否允许点击。clickable=true:允许点击clickable=false:禁止点击setBackgroundResource(intresid)通过资源文件设置背景色。resid:资源xml文件ID。按钮默认背......
  • 【转】Android字体小结
     android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。android:bufferType指定getText()方式取......
  • Android SeekBar的使用
    AndroidSeekBar的使用  <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="......
  • 【Android】ListView与Button的共存问题解决
    【Android】ListView与Button的共存问题解决这两天在捣鼓ListViewwidget,为了在ListView中加入Button这类的有“点击”事件的widget,请教了不少高手,感谢LandMark对我的认真讲解,下面把解决过程描述一下。 ListView和其它能触发点击事件的widget无法一起正常工作的......
  • [android]使用线控耳机来操控应用功能
    使用线控耳机来操控应用功能  实现原理:通过广播拦截来实现。 (一)定义1个广播拦截器,用来拦截线控耳机按键产生的广播事件。 importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandro......
  • android调用系统发短信界面功能
    android调用系统发短信界面功能 Intentintent=newIntent(Intent.ACTION_SENDTO,Uri.parse("smsto:13xxxxxxx")); startActivity(intent); 需要的权限: <uses-permissionandroid:name="android.permission.SEND_SMS"></uses-permission>......