如何在适配器之间成功切换,同时仍然能够使工具栏消失
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 扩展,以访问 presenter
和 presenter1
的布局 ID。
您还在 activity_Horizontal
和 activity_Vertical
中为 presenter
和 presenter1
定义了完全相同的 ID
所以,在你的 page_activity
中必须有这样的导入
import kotlinx.android.synthetic.main.activity_Horizontal.presenter
import kotlinx.android.synthetic.main.activity_Horizontal.presenter1
这就是为什么,当你切换到VerticalView()
,然后点击,没有任何反应,因为它引用了[=18=中的presenter
和presenter1
].
您可以通过改变 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
}
}
}
前段时间得到了大侠的帮助,通过回调函数和界面,帮助我在点击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 扩展,以访问 presenter
和 presenter1
的布局 ID。
您还在 activity_Horizontal
和 activity_Vertical
presenter
和 presenter1
定义了完全相同的 ID
所以,在你的 page_activity
中必须有这样的导入
import kotlinx.android.synthetic.main.activity_Horizontal.presenter
import kotlinx.android.synthetic.main.activity_Horizontal.presenter1
这就是为什么,当你切换到VerticalView()
,然后点击,没有任何反应,因为它引用了[=18=中的presenter
和presenter1
].
您可以通过改变 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
}
}
}