Android抽象导航抽屉

丹尼尔·N。

我正在尝试抽象我的导航抽屉以简化我的Android应用程序,但是我遇到了一些问题。导航抽屉根本不响应触摸,我不知道为什么。

MainActivity.kt

class MainActivity : NavActivity() {
/** ON CREATE **/
override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       main_seekbar_price!!.setOnSeekBarChangeListener(this)
       mDrawerLayout = findViewById(R.id.drawer_layout) // Variable in superclass
...

导航抽屉

abstract class NavActivity : BaseActivity() {

/** Variables **/
lateinit var mDrawerLayout: DrawerLayout


/** ON CREATE **/
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_nav)

    // Set Nav Drawer listener
    nav_view.setNavigationItemSelectedListener { menuItem ->
        Log.d("NAV", "nav selected listener header")
        menuItem.isChecked = true
        mDrawerLayout.closeDrawers()
        navMenuSwitch(menuItem)
        true
    }

    // Set Nav Footer listener
    nav_footer.setNavigationItemSelectedListener { menuItem ->
        Log.d("NAV", "nav selected listener footer")
        menuItem.isChecked = false
        mDrawerLayout.closeDrawers()
        navMenuSwitch(menuItem)
        true
    }
}
...

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorBackground"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

    ...

    </FrameLayout>

    <include layout="@layout/activity_nav" />

</android.support.v4.widget.DrawerLayout>

activity_nav.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.NavigationView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_header"
    app:headerLayout="@layout/nav_header">

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:menu="@menu/drawer_footer">
    </android.support.design.widget.NavigationView>

</android.support.design.widget.NavigationView>

我认为这与在子类中分配mDrawerLayout有关,但是并没有解决任何问题。但是,它永远不会调用侦听器,无论您单击多少,它都不会在该侦听器中打印日志。

欢迎您提供任何帮助,因为我无法终生解决这个问题,在此先感谢您!

杰克大师

呼叫MainActivity时,会按此顺序发生四件事onCreate()

  1. MainActivity的内容视图是通过膨胀设置的activity_nav.xml
  2. nav_viewnav_footer科特林变量通过搜索他们的内容视图分配。Kotlin为您执行此操作,因此很容易忘记它正在发生。)
  3. 侦听器附加到nav_viewnav_footer视图。
  4. MainActivity再次设置内容视图,这次是通过膨胀activity_main.xmlinclude内部标签activity_main.xml告诉框架它应activity_nav.xml在过程中向其另一个副本充气。)旧的内容视图将被覆盖。

因此,到MainActivity.onCreate()完成时,带有侦听器的视图已消失。解决该问题的一种方法是从中删除行setContentView(R.layout.activity_nav)NavActivity.onCreate()然后将其余部分移到initNavDrawerListeners()从中调用方法中MainActivity.onCreate()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章