问题描述
不久前,我得到了一位英雄的帮助,当我使用回调函数和界面单击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 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>
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扩展程序来访问presenter
和presenter1
的布局ID。
您还为presenter
和presenter1
中的activity_Horizontal
和activity_Vertical
定义了完全相同的ID
因此,在您的page_activity
中必须有这样的导入
import kotlinx.android.synthetic.main.activity_Horizontal.presenter
import kotlinx.android.synthetic.main.activity_Horizontal.presenter1
这就是为什么当您切换到VerticalView()
并进行敲击时,没有反应的原因,因为它引用了presenter
中的presenter1
和activity_Horizontal
。
您可以通过更改presenterHorizontal
,presenter1Horizontal
,presenterVertical
和presenter1Vertical
之类的布局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
}
}
}