如何在适配器之间成功切换,同时仍然能够使工具栏消失

how to successfully switch between adapters while still being able to make toolbar disappear

前段时间得到了大侠的帮助,通过回调函数和界面,帮助我在点击ImageView时让Toolbar消失。我已经为不同的页面视图适配器复制了这种算法,它在起始页面适配器中工作得很好,但是当我切换它时,即使点击有效,工具栏也不会消失并重新出现。我已经尝试了一段时间,但没有运气。任何帮助将不胜感激。

来自adapter1.kt

 private lateinit var pageImageCallback: PageImageCallback

    fun setPageImageCallback(pageImageCallback: PageImageCallback) {
        this.pageImageCallback = pageImageCallback
    }

    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        val image_layout: View = inflater.inflate(R.layout.view_pager_item, container, false)
        val page_image: PhotoView = image_layout.findViewById<View>(R.id.page_image) as PhotoView

        Glide.with(image_layout).load(PageList[position].link).placeholder(R.drawable.drip_splash_theme).error(R.drawable.drip_splash_theme).diskCacheStrategy(DiskCacheStrategy.ALL).priority(Priority.HIGH).into(page_image)


        page_image.setOnClickListener(View.OnClickListener {
            pageImageCallback.onClick()
        })

        container.addView(image_layout)
        return image_layout
    }
    

来自适配器 2

    private lateinit var pageImageCallback: PageImageCallback

    fun setPageImageCallback(pageImageCallback: PageImageCallback) {
        this.pageImageCallback = pageImageCallback
    }
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val newView: View = LayoutInflater.from(context).inflate(R.layout.vertical_pager_item, null)
        val web_image: PhotoView = newView.findViewById<View>(R.id.chapterPage) as PhotoView

        Glide.with(context).load(Data[position].link).dontTransform().into(holder.chapter_title)


        holder.chapter_title.setOnClickListener(View.OnClickListener {
            pageImageCallback.onClick()
        })


    }

来自界面

package com.example.dripk.Interface

interface PageImageCallback {
    fun onClick()
}

现在对于我的 activity 文件来说,它相当大,但重点是我有四个不同的版本来显示图像。一个是水平的,它在常规图库中显示图像,它有两个子类别,您可以在其中更改从左到右或从右到左的阅读方向,最后 ImageView 以垂直显示的方式和那个是扔reyclerview。但是当我使用我的菜单设置切换视图时,它在第一次切换后没有响应。我曾尝试为垂直阅读实现不同的界面,但我没有运气。我觉得是因为我对接口和回调缺乏了解。但再次感谢您的帮助。

来自page_activity.kt

class Page_Activity : AppCompatActivity(),
    PageImageCallback, PopupMenu.OnMenuItemClickListener {
    private var myViewPager: HorizontalAdapter? = null
    private var Vertical: VerticalViewAdapter? = null
    private var reading_direction: Float? = 180F


    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_viewer)
    


        HorizontalView()

    }
private fun HorizontalView() {
        setContentView(R.layout.activity_Horizontal)


        val myrv = findViewById<View>(R.id.right_page) as ViewPager
        myViewPager = HorizontalAdapter(this, lstPages)
        myrv.rotationY = reading_direction!!
        myViewPager!!.setPageImageCallback(this)

        myrv.setPageTransformer(false,
            ViewPager.PageTransformer { page, position ->
                page.rotationY =
                    reading_direction as Float
            })
        myrv.adapter = myViewPager

       



    }

    private fun VerticalView() {
        setContentView(R.layout.activity_Vertical)
        val myrv = findViewById<View>(R.id.recycler) as RecyclerView
        Vertical = VerticalViewAdapter(this, lstPages)
        Vertical !!.setPageImageCallback(this)
        myrv.layoutManager = LinearLayoutManager(
            this,
            LinearLayoutManager.VERTICAL,
            false
        )
        myrv.adapter = Vertical

    }

解决方案

       override fun onClick() {
        val presenterHorizontal11 = findViewById<Toolbar>(R.id.presenterHorizontal)
        val presenter11Horizontal = findViewById<Toolbar>(R.id.presenter1Horizontal)
        val presenterVertical22 = findViewById<Toolbar>(R.id.presenterVertical)
        val presenter11Vertical = findViewById<Toolbar>(R.id.presenter1Vertical)

        if (view == 1) {
            if (presenterVertical22.visibility == View.INVISIBLE) {
                presenterVertical22.visibility = View.VISIBLE
                presenter11Vertical.visibility = View.VISIBLE
            } else {
                presenterVertical22.visibility = View.INVISIBLE
                presenter11Vertical.visibility = View.INVISIBLE
            }
        }

        if (view == 2) {
            if (presenterHorizontal11.visibility == View.INVISIBLE) {
                println("webtoon visible")
                presenterHorizontal11.visibility = View.VISIBLE
                presenter11Horizontal.visibility = View.VISIBLE
            } else {
                presenterHorizontal11.visibility = View.INVISIBLE
                presenter11Horizontal.visibility = View.INVISIBLE
            }
        }

    }
    override fun onMenuItemClick(p0: MenuItem?): Boolean {
        return when (p0?.itemId) {
            R.id.item1 -> {
                view = 1
                MangaView()
                true
            }
            R.id.item2 -> {
                view = 2
                WebToonView()
                true
            }
            R.id.item3 -> {
                true
            }
            R.id.left -> {
                view = 1
                reading_direction = 0F
                MangaView()
                true
            }
            R.id.right -> {
                view = 1
                reading_direction = 180F
                MangaView()
                true
            }

            else -> false
        }
    }

来自vertical_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Activity.Page_Activity"
    android:id="@+id/web_viewer"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true">

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

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

        <include
            android:id="@+id/presenter"
            layout="@layout/presenter">
        </include>
        <include
            android:id="@+id/presenter1"
            layout="@layout/presenter1">
        </include>

    </FrameLayout>


</LinearLayout>

来自horizontal_reader

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Activity.Page_Activity"
    android:id="@+id/viewer"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true">

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



        <androidx.viewpager.widget.ViewPager
            android:layoutDirection="locale"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/right_page">
        </androidx.viewpager.widget.ViewPager>



        <include
            android:id="@+id/presenter"
            layout="@layout/presenter">
        </include>
        <include
            android:id="@+id/presenter1"
            layout="@layout/presenter1">
        </include>

    </FrameLayout>

</LinearLayout>

从presenter1.xml

<?xml version="1.0" encoding="utf-8"?>
<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="#2C2C2C">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp">

            <Button
                android:layout_width="50dp"
                android:id="@+id/to_chapters"
                android:clickable="true"
                android:layout_height="wrap_content"
                android:background="#2C2C2C"
                android:drawableTop="@drawable/ic_baseline_arrow_back_24_2"
                android:focusable="true"
                android:gravity="center_horizontal|top">
            </Button>

            <Button
                android:id="@+id/settings"
                android:layout_width="50dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="275dp"
                android:background="#2C2C2C"
                android:drawableTop="@drawable/ic_baseline_settings_24"
                android:gravity="center_horizontal|top"
                android:onClick="showPopup">

            </Button>


        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="25dp"
                android:text="Name"
                android:id="@+id/name"
                android:textColor="#FFFFFF">

            </TextView>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/name"

                android:text="Chapter Name"
                android:textColor="#FFFFFF">

            </TextView>
        </LinearLayout>




    </LinearLayout>
</Toolbar>

来自presenter.xml

<?xml version="1.0" encoding="utf-8"?>
<Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#2C2C2C">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <Button
        android:layout_width="50dp"
        android:id="@+id/back"
        android:layout_height="wrap_content"
        android:layout_marginEnd="278dp"
        android:background="#2C2C2C"
        android:drawableLeft="@drawable/ic_baseline_arrow_back_24"
        android:focusable="true">

    </Button>

    <Button
        android:layout_width="50dp"
        android:id="@+id/next"
        android:clickable="true"
        android:layout_height="wrap_content"
        android:background="#2C2C2C"
        android:drawableLeft="@drawable/ic_baseline_arrow_forward_24"
        android:focusable="true">

    </Button>
    </LinearLayout>
</Toolbar>

我认为问题出在您的 onClick() 功能上

    override fun onClick() {
        if (presenter.visibility == View.INVISIBLE) {
            println("clicked")
            presenter.visibility = View.VISIBLE
            presenter1.visibility = View.VISIBLE
        } else {
            presenter.visibility = View.INVISIBLE
            presenter1.visibility = View.INVISIBLE
        }
    }

您在这里使用 Kotlin Android 扩展,以访问 presenterpresenter1 的布局 ID。

您还在 activity_Horizontalactivity_Vertical

中为 presenterpresenter1 定义了完全相同的 ID

所以,在你的 page_activity 中必须有这样的导入

import kotlinx.android.synthetic.main.activity_Horizontal.presenter
import kotlinx.android.synthetic.main.activity_Horizontal.presenter1

这就是为什么,当你切换到VerticalView(),然后点击,没有任何反应,因为它引用了[=18=中的presenterpresenter1 ].

您可以通过改变 presenterHorizontalpresenter1HorizontalpresenterVerticalpresenter1Vertical 等布局 ID 来解决此问题。

然后在您的 onClick() 函数中,像这样添加另一个检查器

override fun onClick() {
    if (viewer.visibility == View.VISIBLE) {
       if (presenterHorizontal.visibility == View.INVISIBLE) {
           println("clicked")
           presenterHorizontal.visibility = View.VISIBLE
           presenter1Horizontal.visibility = View.VISIBLE
       } else {
           presenterHorizontal.visibility = View.INVISIBLE
           presenter1Horizontal.visibility = View.INVISIBLE
       }
    } else {
       if (presenterVertical.visibility == View.INVISIBLE) {
           println("clicked")
           presenterVertical.visibility = View.VISIBLE
           presenter1Vertical.visibility = View.VISIBLE
       } else {
           presenterVertical.visibility = View.INVISIBLE
           presenter1Vertical.visibility = View.INVISIBLE
       }
    }
}