工具栏点击侦听器不适用

时间:2019-01-30 17:40:10

标签: android kotlin androidx

我在“片段”中有以下代码可用于设置工具栏:

with(root) {
            with(activity as AppCompatActivity) {
                setupActionBar(toolbar) {
                    setDisplayHomeAsUpEnabled(true)
                    setDisplayShowHomeEnabled(true)
                }
            }
            toolbar.setNavigationOnClickListener { activity?.finish() }
        }

这是我的setupActionBar方法:

fun AppCompatActivity.setupActionBar(toolbar : Toolbar, action: ActionBar.() -> Unit) {
    setSupportActionBar(toolbar)
    supportActionBar?.run {
        action()
    }
}

布局中的工具栏:

    <?xml version="1.0" encoding="utf-8"?>
<layout 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"
        tools:context=".ui.detail.DetailFragment">

    <data>
        <variable
                name="artist"
                type="com.sample.android.lastfm.model.LastFmArtist"/>
    </data>

    <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <com.google.android.material.appbar.AppBarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            <com.google.android.material.appbar.CollapsingToolbarLayout
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    app:collapsedTitleTextAppearance="@style/CollapsedToolbar"
                    app:contentScrim="?attr/colorPrimary"
                    app:expandedTitleTextAppearance="@style/ExpandedToolbar"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
                    app:title="@{artist.name}">

                <ImageView
                        android:id="@+id/movie_poster"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:scaleType="centerCrop"
                        app:layout_collapseMode="parallax"
                        app:imageUrl="@{artist.images}"
                        tools:ignore="contentDescription"/>

                <androidx.appcompat.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:minHeight="?attr/actionBarSize"
                        app:layout_collapseMode="pin"
                        app:theme="@style/Toolbar"/>

                <com.google.android.material.tabs.TabLayout
                        android:id="@+id/tabLayout"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/custom_tab_layout_height"
                        app:tabGravity="fill"
                        app:tabIndicatorColor="@color/colorAccent"
                        app:tabIndicatorHeight="4dp"
                        app:tabMode="fixed"/>

            </com.google.android.material.appbar.CollapsingToolbarLayout>

        </com.google.android.material.appbar.AppBarLayout>

        <androidx.viewpager.widget.ViewPager
                android:id="@+id/viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</layout>

当我单击工具栏时,它不会将我导航回到上一屏幕。看来它不可点击。

3 个答案:

答案 0 :(得分:0)

(activity as AppCompatActivity).setSupportActionBar(toolbar)
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)

然后在您的片段中

覆盖onOptionsItemSelected

 override fun onOptionsItemSelected(item: MenuItem?): Boolean {

            when (item?.itemId) {

                android.R.id.home -> {
                 activity?.onBackPressed()
                    }

        }
     return true
}  

答案 1 :(得分:0)

将工具栏添加到片段xml中 并在您的onCreateView中尝试此代码

Toolbar toolbar = view.findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.ic_back_button); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } });

答案 2 :(得分:0)

工具栏不应为:

<androidx.appcompat.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:minHeight="?attr/actionBarSize"
                        app:layout_collapseMode="pin"
                        app:theme="@style/Toolbar"/>

它应该是:

<androidx.appcompat.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="?attr/actionBarSize"
                        app:layout_collapseMode="pin"
                        app:theme="@style/Toolbar"/>