提交 8c3a733d 编写于 作者: J jimmy

recyclerview嵌套Recyclerview 冲突解决方案

上级 b0de7e5f
......@@ -5,6 +5,7 @@
<map>
<entry key="../../../../layout/custom_preview.xml" value="0.11757215619694397" />
<entry key="../../.gradle/caches/transforms-3/e02e405d5d7f7951fc2dc1c87c92bf5d/transformed/jetified-coolindicator-1.0.0-beta/res/drawable/default_drawable_indicator.xml" value="0.1" />
<entry key="../../Library/Android/sdk/platforms/android-31/data/res/layout/test_list_item.xml" value="0.16041666666666668" />
<entry key="..\:/ASproject/base/Base/src/main/res/layout/layout_tab.xml" value="0.22871376811594202" />
<entry key="..\:/ASproject/base/app/src/main/res/layout/activity_login.xml" value="0.36770833333333336" />
<entry key="Base/src/main/res/drawable/bg_bottom_05_line_gray.xml" value="0.1295" />
......@@ -65,11 +66,14 @@
<entry key="app/src/main/res/layout/fragment_demo.xml" value="0.15885416666666666" />
<entry key="app/src/main/res/layout/fragment_demo_load.xml" value="0.20677083333333332" />
<entry key="app/src/main/res/layout/fragment_glide.xml" value="0.165625" />
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.21927083333333333" />
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.1" />
<entry key="app/src/main/res/layout/fragment_rv.xml" value="0.21979166666666666" />
<entry key="app/src/main/res/layout/item_banner.xml" value="0.17" />
<entry key="app/src/main/res/layout/item_circle.xml" value="0.25" />
<entry key="app/src/main/res/layout/item_home_title.xml" value="0.21" />
<entry key="app/src/main/res/layout/item_img.xml" value="0.3567708333333333" />
<entry key="app/src/main/res/layout/item_learn.xml" value="0.2828125" />
<entry key="app/src/main/res/layout/item_learn1.xml" value="0.2703804347826087" />
<entry key="app/src/main/res/layout/item_string.xml" value="0.21979166666666666" />
<entry key="app/src/main/res/layout/layout_string.xml" value="0.21875" />
<entry key="app/src/main/res/layout/layout_student.xml" value="0.2390625" />
......
package com.xx.utils.manager
import android.content.Context
import android.util.AttributeSet
import android.util.DisplayMetrics
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView
class CenterLayoutManager : LinearLayoutManager {
constructor(context: Context?) : super(context)
constructor(context: Context?, orientation: Int, reverseLayout: Boolean) : super(
context,
orientation,
reverseLayout
)
constructor(
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
override fun smoothScrollToPosition(
recyclerView: RecyclerView,
state: RecyclerView.State,
position: Int
) {
var smoothScroller = CenterSmoothScroller(recyclerView.context);
smoothScroller.targetPosition = position;
startSmoothScroll(smoothScroller);
}
companion object
class CenterSmoothScroller : LinearSmoothScroller {
constructor(context: Context?) : super(context)
override fun calculateDtToFit(
viewStart: Int,
viewEnd: Int,
boxStart: Int,
boxEnd: Int,
snapPreference: Int
): Int {
return boxStart + (boxEnd - boxStart) / 2 - (viewStart + (viewEnd - viewStart) / 2)
}
override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float {
return 100f / displayMetrics.densityDpi;
}
}
}
\ No newline at end of file
package com.xx.view
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.recyclerview.widget.RecyclerView
import com.xx.expand.log
class MyRecyclerView : RecyclerView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
var ding: Boolean = false
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
var canScrollVertically = canScrollVertically(-1)
// ("这个时候是到顶了吗" + !canScrollVertically).log()
// if (canScrollVertically(-1) && ding) {//没有到顶
// ding = true
// parent.requestDisallowInterceptTouchEvent(true)
// }
val dispatchTouchEvent = super.dispatchTouchEvent(ev)
"MyRecyclerView - dispatchTouchEvent - $dispatchTouchEvent".log()
return dispatchTouchEvent
}
override fun onInterceptTouchEvent(e: MotionEvent?): Boolean {
var onInterceptTouchEvent = super.onInterceptTouchEvent(e)
"MyRecyclerView - onInterceptTouchEvent - $onInterceptTouchEvent".log()
return onInterceptTouchEvent
// return onInterceptTouchEvent
}
override fun onTouchEvent(e: MotionEvent?): Boolean {
var onTouchEvent = super.onTouchEvent(e)
"MyRecyclerView - onTouchEvent-$onTouchEvent".log()
return onTouchEvent
}
}
\ No newline at end of file
package com.xx.view
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.recyclerview.widget.RecyclerView
import com.xx.expand.log
class ParRecyclerView : RecyclerView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
var dispatchTouchEvent = super.dispatchTouchEvent(ev)
"ParRecyclerView - dispatchTouchEvent - $dispatchTouchEvent".log()
return dispatchTouchEvent
}
override fun onInterceptTouchEvent(e: MotionEvent?): Boolean {
var onInterceptTouchEvent = super.onInterceptTouchEvent(e)
"ParRecyclerView - onInterceptTouchEvent - $onInterceptTouchEvent".log()
return onInterceptTouchEvent
}
override fun onTouchEvent(e: MotionEvent?): Boolean {
var onTouchEvent = super.onTouchEvent(e)
"ParRecyclerView - onTouchEvent--$onTouchEvent".log()
return onTouchEvent
}
}
\ No newline at end of file
package com.xxx.kotlinlearn.adapter.viewBinder.home
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.drake.brv.utils.linear
import com.drake.brv.utils.setup
import com.xx.utils.manager.CenterLayoutManager
import com.xxx.kotlinlearn.R
import com.xxx.kotlinlearn.bean.LearnBean
import com.xxx.kotlinlearn.bean.NeedLearnBeanWrap
import com.xxx.kotlinlearn.databinding.ItemLearn1Binding
import com.xxx.kotlinlearn.databinding.ItemLearnBinding
import me.drakeet.multitype.ItemViewBinder
class LearnBinder : ItemViewBinder<NeedLearnBeanWrap, LearnBinder.BannerHolder>() {
class BannerHolder(var binding: ItemLearnBinding) : RecyclerView.ViewHolder(binding.root) {
fun processLogic(bean: NeedLearnBeanWrap) {
binding.rv.linear(orientation = RecyclerView.VERTICAL).setup {
addType<LearnBean>(R.layout.item_learn1)
onBind {
var binding1 = getBinding<ItemLearn1Binding>()
binding1.tvTitle.text = getModel<LearnBean>().title
}
}.models = bean.learnBeanList
}
}
override fun onCreateViewHolder(inflater: LayoutInflater, parent: ViewGroup): BannerHolder {
return BannerHolder(ItemLearnBinding.inflate(inflater, parent, false))
}
override fun onBindViewHolder(holder: BannerHolder, item: NeedLearnBeanWrap) {
holder.processLogic(item)
}
}
\ No newline at end of file
package com.xxx.kotlinlearn.bean
data class LearnBean(
val title: String,
val desc: String = "",
)
\ No newline at end of file
package com.xxx.kotlinlearn.bean
data class NeedLearnBeanWrap(
val learnBeanList: ArrayList<LearnBean>
)
......@@ -4,10 +4,9 @@ import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import com.xx.base.BaseBindingFragment
import com.xxx.kotlinlearn.adapter.viewBinder.home.BannerBinder
import com.xxx.kotlinlearn.adapter.viewBinder.home.LearnBinder
import com.xxx.kotlinlearn.adapter.viewBinder.home.TitleBinder
import com.xxx.kotlinlearn.bean.BannerBean
import com.xxx.kotlinlearn.bean.BannerBeanWrap
import com.xxx.kotlinlearn.bean.TitleBean
import com.xxx.kotlinlearn.bean.*
import com.xxx.kotlinlearn.databinding.FragmentHomeBinding
import me.drakeet.multitype.MultiTypeAdapter
......@@ -25,9 +24,10 @@ class HomeFragment : BaseBindingFragment<FragmentHomeBinding>() {
multiTypeAdapter = MultiTypeAdapter()
multiTypeAdapter.register(BannerBeanWrap::class.java, BannerBinder())
multiTypeAdapter.register(TitleBean::class.java, TitleBinder())
multiTypeAdapter.register(NeedLearnBeanWrap::class.java, LearnBinder())
d.recyclerView.adapter = multiTypeAdapter
d.recyclerView.adapter = multiTypeAdapter
multiTypeAdapter.items = getData()
}
......@@ -66,8 +66,42 @@ class HomeFragment : BaseBindingFragment<FragmentHomeBinding>() {
var allList = ArrayList<Any>();
allList.add(bannerBeanWrap)
var titleBean = TitleBean("需要学习的内容")
allList.add(titleBean)
for (i in 0..20) {
var titleBean = TitleBean("需要学习的内容")
allList.add(titleBean)
}
//横向需要学习的内容
var learnBeanList = ArrayList<LearnBean>()
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
learnBeanList.add(LearnBean("你好"))
var learnBeanWrap = NeedLearnBeanWrap(learnBeanList)
allList.add(learnBeanWrap)
return allList
}
......
......@@ -8,13 +8,13 @@
tools:ignore="MissingDefaultResource">
<androidx.recyclerview.widget.RecyclerView
<com.xx.view.ParRecyclerView
android:id="@+id/recyclerView"
android:layout_marginTop="85dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.recyclerview.widget.RecyclerView>
</com.xx.view.ParRecyclerView>
<LinearLayout
android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<com.xx.view.MyRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/rv"
android:layout_height="500dp">
</com.xx.view.MyRecyclerView>
\ No newline at end of file
<?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">
<data>
</data>
<com.xx.view.round.RoundCropViewLayout
android:id="@+id/rc"
android:layout_width="45dp"
app:rv_cornerRadius="45dp"
app:rv_backgroundColor="@color/red_400"
android:layout_height="45dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:layout_height="wrap_content">
</TextView>
</com.xx.view.round.RoundCropViewLayout>
</layout>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册