gpt4 book ai didi

android - 如何在我只需要更改 Activity 而不在 Intent 中添加任何内容的情况下抽象更改 Activity 逻辑?

转载 作者:行者123 更新时间:2023-11-30 00:02:28 25 4
gpt4 key购买 nike

我有一个简单的 Activity ,当它创建时,它会做一些检查,如果用户没有登录,它可能会切换到另一个 Activity 。

如果我这样做,它会起作用:

class HomeActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)

if (userPreference?.memberRegistered == false) {
val intent = Intent(this, AuthActivity::class.java)
startActivity(intent)
}
}
}

但是如果我把它抽象成另一种方法,它就不行了。

class HomeActivity : SalectActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)

if (userPreference?.memberRegistered == false) {
goToActivity(AuthActivity::class.java)
}
}

fun <T: Any> goToActivity(activity: Class<T>) {
val intent = Intent(this, activity::class.java)
startActivity(intent)
}
}

错误是:

java.lang.RuntimeException: Unable to start activity ComponentInfo{nz.salect.handset/nz.salect.handset.HomeActivity}:

android.content.ActivityNotFoundException: Unable to find explicit activity class {nz.salect.handset/java.lang.Class}; have you declared this activity in your AndroidManifest.xml?
.......

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {nz.salect.handset/java.lang.Class}; have you declared this activity in your AndroidManifest.xml?
.......

错误发生在 startActivity() 调用处。

这是Manifest,当然AuthActivity是有的,不然正常的方式不行。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nz.salect.handset">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AuthActivity" />
</application>

</manifest>

这里发生了什么?

如何解决这个问题,我错过了什么?

最佳答案

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class >

你得到上面的异常是因为你在 list 文件中没有任何 Activity activity::class.java 这就是你得到 ActivityNotFoundException 的原因/p>

当你使用 val intent = Intent(this, activity::class.java) 意味着你 intent 到另一个名为“activity”的 Activity 而不是你的 AuthActivity

根据 my above comment

使用这个

fun <T: Any> goToActivity(activity: Class<T>) {
val intent = Intent(this, activity)
startActivity(intent)
}

代替这个

fun <T: Any> goToActivity(activity: Class<T>) {
val intent = Intent(this, activity::class.java)
startActivity(intent)
}

关于android - 如何在我只需要更改 Activity 而不在 Intent 中添加任何内容的情况下抽象更改 Activity 逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com