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谢谢你们两位。我的错。因为我已经将类定义作为参数传递到了那里。