Мне нужно создать приложение с 6 экранами действий и пользовательскими вкладками навигации на панели под ними (все должны иметь значок и метку). Я сделал навигационные кнопки в виде отдельного макета и включаю в нижнюю часть каждого макета активности, чтобы не перезаписывать один и тот же код несколько раз. Далее я хочу сделать их кликабельными в каждом упражнении и настроить слушателей на них. Сначала я вручную настраивал слушателей на каждое действие, подобное:
val navTabA = findViewById<Button>(R.id.tab_A)
navTabA.setBackgroundResource(R.drawable.nav_button_active)
navTabA.setOnClickListener {
val intent = Intent(applicationContext, A_Activity::class.java)
startActivity(intent)
}
... 5 more ...
Это работает хорошо, но один и тот же код был написан 36 раз, и это не очень хорошо. Поэтому идея состояла в том, чтобы создать отдельный класс, который определяет эти кнопки и устанавливает слушателей на них, и каждое действие только импортирует их.
Я пытался написать что-то вроде этого:
NavHelper:
package com.example.app
import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
class NavHelper
: AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val navTabA = findViewById<Button>(R.id.tab_A)
navTabA.setOnClickListener(this)
}
override fun onClick(v: View) {
when(v.id) {
R.id.tab_A -> startActivity(Intent(applicationContext, A_Activity::class.java))
}
}
}
Активность:
package com.example.app
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class A_Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_A)
setTitle(R.string.A_Activity_label)
NavHelper()
}
Но в этом случае кнопки не кликабельны (никакого эффекта на клик и анимации кликов нет). Как правильно использовать такой класс?