Использование в Activity отдельного класса, который создает кнопки с установленным onClickListeners на Android Studio - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно создать приложение с 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()
}

Но в этом случае кнопки не кликабельны (никакого эффекта на клик и анимации кликов нет). Как правильно использовать такой класс?

...