Не запускается второе activity через intent в kotlin
У меня есть 2 activity: LevelActivity.kt , GameActivity.kt В LevelActivity.kt я создал несколько методов, которые создают Intent(action) и которые вызываются в зависимости от того, какой уровень сложности выбрал пользователь.
fun playEasy(view: View) {
val intent = Intent(ACTION_EASY)
startActivity(intent)
}
При работе приложения, когда выбираешь уровень сложности возникает ошибка - java.lang.IllegalStateException: Could not execute method for android:onClick
В предыдущем проекте на Java, при использовании того же процесса все работало корректно. Помогите плиз, долго искал решение но так и не нашел
P.S. Action я объявил в AndroidManifest
<activity android:name=".GameActivity">
<intent-filter>
<action android:name="info.android.action.easy"/>
<action android:name="info.android.action.medium"/>
<action android:name="info.android.action.hard"/>
<action android:name="info.android.action.impossible"/>
</intent-filter>
</activity>
Ответы (1 шт):
Чтобы запустить Activity, нужно вызвать startActiviity() метод и передать ему в параметры Intent.
Ваш способ, описанный в вопросе, очень интересный, но я бы сделал иначе. Как? Описываю дальше.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setViewClickListeners()
}
private fun setViewClickListeners() {
btnEasy.setOnClickListener { startGameActivity(GameDifficulty.EASY_GAME) }
btnMedium.setOnClickListener { startGameActivity(GameDifficulty.MEDIUM_GAME) }
btnHard.setOnClickListener { startGameActivity(GameDifficulty.HARD_GAME) }
btnImpossible.setOnClickListener { startGameActivity(GameDifficulty.IMPOSSIBLE_GAME) }
}
private fun startGameActivity(gameDifficulty: GameDifficulty) = startActivity(GameActivity.getEasyGameIntent(this, gameDifficulty))
}
class GameActivity : AppCompatActivity() {
companion object {
private const val KEY_GAME_VARIANT = "key_game_variant"
fun getGameIntent(context: Context, gameDifficulty: GameDifficulty): Intent =
Intent(context, GameActivity::class.java).putExtra(
KEY_GAME_VARIANT,
gameDifficulty.toString()
)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game)
val gameDifficultyString: String? = intent.getStringExtra(KEY_GAME_VARIANT)
gameDifficultyString.let {
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
}
}
enum class GameDifficulty {
EASY_GAME,
MEDIUM_GAME,
HARD_GAME,
IMPOSSIBLE_GAME
}
В будущем можно будет модифицировать enum класс GameDifficulty, чтобы он хранил в себе варианты DeBuff'a соперников или иной другой тип данных нужного уровня сложности.
Будет выглядеть это так
enum class GameDifficulty(enemyDeBuff: Int) {
EASY_GAME(5),
MEDIUM_GAME(15),
HARD_GAME(35),
IMPOSSIBLE_GAME(60)
}
или так
enum class GameDifficulty(enemyDeBuff: Int, heroAttack: Int) {
EASY_GAME(5, 75),
MEDIUM_GAME(15, 60),
HARD_GAME(35, 45),
IMPOSSIBLE_GAME(60, 30)
}
И через сериализацию, к примеру библиотекой от Google Gson, доставать эти значения. Но это уже совсем другая история другой вопрос.