【问题标题】:Intent Activity Utils , not declarated in Manifest - Kotlin, AndroidIntent Activity Utils ,未在 Manifest 中声明 - Kotlin, Android
【发布时间】:2021-07-02 14:41:38
【问题描述】:

我正在尝试将 Intent Activity Utils 实现为 Kotlin 中的扩展功能。他们将从其他活动/片段开始活动。请向我建议最好的方法()。

我试图这样解决这个问题:

在 Activity 中,我调用类似的扩展函数:

     when (view.id) {
        PROFILE.actionViewId -> {
            // Start Activity normally
            startNewActivity(MyProfileActivity::class.java) 
        }
        PREPAID_RECHARGE.actionViewId -> {
            // Dont start activity  and crash
            startNewActivityForResult(RechargePrepaidActivity::class.java, RECHARGE_PREPAID_REQUEST_CODE) 
            // Start Activity normally 
            this.startActivityForResult(Intent(this, RechargePrepaidActivity::class.java), RECHARGE_PREPAID_REQUEST_CODE) 
        }
        TROUBLE_TICKETS.actionViewId -> {
            startNewActivity(TroubleTicketsActivity::class.java) // Start Activity normally
        }
        HELP.actionViewId -> {
            startNewActivity(HelpSectionActivity::class.java) // Start Activity normally
        }

IntentUtils.kt:

fun <T : BaseActivity> BaseActivity.startNewActivity(newActivity: Class<T>) {
    val intent = Intent(this, newActivity)
    this.startActivity(intent)
}

//fun BaseActivity.startNewActivity(newActivity: Class<*>) {
//    val intent = Intent(this, newActivity)
//    this.startActivity(intent)
//}

fun BaseActivity.startNewActivityForResult(newActivity: Class<*>, requestCode : Int) {
    val intent = Intent(this, newActivity::class.java)
    startActivityForResult(intent, requestCode)
}

fun BaseFragment.startNewActivity(newActivity: Class<*>) {
    val intent = Intent(this.requireActivity(), newActivity::class.java)
    this.startActivity(intent)
}

fun BaseFragment.startNewActivityForResult(newActivity: Class<*>, requestCode : Int) {
    val intent = Intent(this.requireActivity(), newActivity::class.java)
    startActivityForResult(intent, requestCode)
}

此外,Activity 在 Manifest - Kotlin, Android 中声明

        <activity
        android:name=".ui.recharge.RechargePrepaidActivity"
        android:configChanges="locale|orientation|screenSize"
        android:screenOrientation="portrait" />

这会正常启动活动:

    startNewActivity(MyProfileActivity::class.java) // use extend func
    startActivity(Intent(this, MyProfileActivity::class.java)) // use inherited Activity func 

但是当我尝试通过请求代码创建相同的函数来启动结果活动时,它不起作用,当我使用继承的活动函数 startActivityForResult() 时,没关系

            // Dont start activity and crash
            startNewActivityForResult(RechargePrepaidActivity::class.java, RECHARGE_PREPAID_REQUEST_CODE) 
            // Start Activity normally 
            startActivistyForResult(Intent(this, RechargePrepaidActivity::class.java), RECHARGE_PREPAID_REQUEST_CODE) 

这里奇怪的是,当我使用我的IntentUtils.startNewActivityForResult() 应用程序崩溃时
ActivityNotFoundException,但在正常使用Fragment.startActivityForResult() 时它没有这种行为:

Caused by: android.content.ActivityNotFoundException: 
     Unable to find explicit activity class {/java.lang.Class}; have you declared this activity in your AndroidManifest.xml?
    at ui.utils.view.IntentUtilsKt.startNewActivityForResult(IntentUtils.kt:19)
    at ui.main.hamburgerMenu.HamburgerMenuActivity.onClick(HamburgerMenuActivity.kt:117)

【问题讨论】:

  • 我不确定你是如何表达你的问题的。 RechargePrepaidActivity 是否在您的清单中注册?您只能启动在清单中注册的活动。
  • 是的,它已在清单中注册,这是令人困惑的部分,我以通常的方式开始意图没有任何问题:startActivistyForResult(Intent(this, RechargePrepaidActivity::class.java), RECHARGE_PREPAID_REQUEST_CODE)

标签: android kotlin android-intent kotlin-android-extensions kotlin-extension


【解决方案1】:

问题出在重复的::class.java 调用中:

错误:

fun BaseActivity.startNewActivityForResult(newActivity: Class<*>, requestCode : Int) {
    val intent = Intent(this, newActivity::class.java) //duplicated ::class.java
    startActivityForResult(intent, requestCode) 
 }

右:

fun BaseActivity.startNewActivityForResult(newActivity: Class<*>, requestCode : Int) {
    val intent = Intent(this, newActivity) // removed ::class.java
    startActivityForResult(intent, requestCode)
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多