kotlin - что может быть лучше, чем передача активности в классы non_activity - PullRequest
0 голосов
/ 28 октября 2019

Я написал несколько классов для создания и использования некоторых инструментов в моем приложении, например, я написал класс для создания навигации по ящикам и использую его в некоторых своих действиях. для предотвращения повторного использования того же кода, я использовал пользовательский класс, и я просто вызываю его в своей деятельности и передаю ему действие

это мой код:

class Drawer(_activity: Activity) :NavigationView.OnNavigationItemSelectedListener  {
private val activity:Activity
private val drawerLayout: DrawerLayout
private val nav_view:NavigationView

init{
    activity=_activity
    drawerLayout=activity.findViewById(R.id.drawer_layout)
    nav_view=activity.findViewById(R.id.drawer_nav_view)
}

fun makeDrawer() {
    drawerLayout.openDrawer(Gravity.RIGHT)
    nav_view.setNavigationItemSelectedListener(this)
}

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.drawer_home -> {
            Log.v(Constants.TAG,"home clicked")
        }
    }
    closeDrawer()
    return true
}

fun closeDrawer()=drawerLayout.closeDrawer(Gravity.RIGHT)

isэто хороший способ передать активность в неактивные классы, чтобы предотвратить использование некоторых кодов? есть ли альтернатива для этого?

1 Ответ

1 голос
/ 28 октября 2019

Передача справки о деятельности приводит к возможным сбоям. Существует лучший способ. Вы можете создать DrawerActivity, расширяющий AppCompatActivity, и поместить в него большую часть этой логики. Затем, когда у вас есть активность, которая использует ящик, вы просто расширяете DrawerActivity вместо AppCompatActivity.

Создайте несколько абстрактных функций, таких как

abstract fun getDrawerLayout(): DrawerLayout
abstract fun getNavView(): NavView

, которые вы будете реализовывать в методах, которыепродлевает ваш DrawerActivity. Таким образом, у вас будет в наличии все, что вам нужно DrawerActivity для подключения логики для ящика.

Ваша функция

fun makeDrawer() {
    drawerLayout.openDrawer(Gravity.RIGHT)
    nav_view.setNavigationItemSelectedListener(this)
}

теперь будет

fun makeDrawer() {
    getDrawer().openDrawer(Gravity.RIGHT)
    getNavView().setNavigationItemSelectedListener(this)
}

Другие части класса вы также можете заменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...