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

问题描述

不久前,我得到了一位英雄的帮助,当我使用回调函数和界面单击Toolbar时,他帮助我使ImageView消失了。我已经为另一种页面视图适配器复制了这种算法,并且在起始页面适配器中可以完全正常工作,但是当我切换它时,即使点击有效,工具栏也不会消失并重新出现。我已经尝试了一段时间,但没有运气。任何帮助将不胜感激。

来自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()
}

现在对于我的活动文件,它很大,但是要点是我有四个不同的版本来显示图像。一个是水平的,它在常规画廊中显示图像,该子类有两个子类别,您可以在其中更改阅读方向,从左到右或从右到左,最后一种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
        }
    }

from 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>

from horizo​​ntal_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>

from 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>

from 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。

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

因此,在您的page_activity中必须有这样的导入

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

这就是为什么当您切换到VerticalView()并进行敲击时,没有反应的原因,因为它引用了presenter中的presenter1activity_Horizontal

您可以通过更改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
       }
    }
}