Android 如何抽象一个只需要更改活动而不在意图中添加任何内容的更改活动逻辑?

Android 如何抽象一个只需要更改活动而不在意图中添加任何内容的更改活动逻辑?,android,android-activity,kotlin,Android,Android Activity,Kotlin,我有一个简单的活动,当它创建时,它会做一些检查,如果用户未登录,可能会切换到另一个活动 如果我这样做,它会起作用: class HomeActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_home)

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

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

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)
    }
}
<?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>
这里发生了什么事

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

原因:android.content.ActivityNotFoundException:找不到显式活动类>

您获得上述异常是因为在清单文件中没有任何活动
activity::class.java
,这就是您获得
ActivityNotFoundException

当您使用
val intent=intent(这是activity::class.java)
时,意味着您将
intent
用于另一个名为“activity”的活动,而不是用于您的
AuthActivity

依照

用这个

fun <T: Any> goToActivity(activity: Class<T>) {
        val intent = Intent(this, activity)
        startActivity(intent)
}
fun goToActivity(活动:类){
val intent=intent(本活动)
星触觉(意图)
}
而不是这个

fun <T: Any> goToActivity(activity: Class<T>) {
        val intent = Intent(this, activity::class.java)
        startActivity(intent)
    }
fun goToActivity(活动:类){
val intent=intent(这个活动::class.java)
星触觉(意图)
}

你能用清单更新你的问题吗?试试这个
val intent=intent(这个,活动)
它有效!但是为什么我调用它而不提取到函数时它会工作呢
val intent=intent(这是AuthActivity::class.java)
。是不是一样?@code>在
goToActivity
函数中,它将为
activity::class.java
而不是
AuthActivity::class.java
启动活动,而不是在你的manifeat文件中,你没有任何活动
activity::class.java
这就是为什么你会得到
activity notfoundexception
,因为行
val-intent=intent(this,activity::class.java)
表示您打算参与另一个名为“activity”的活动,同时
val-intent=intent(this,activity)
此行调用AuthActivity,因为您传递了
AuthActivity::class.java
param@MochamadTaufikHidayat谢谢你们两位。我的错。因为我已经将类定义作为参数传递到了那里。