gpt4 book ai didi

android - Google Map + ViewPager2 刷卡冲突

转载 作者:行者123 更新时间:2023-12-02 12:37:30 26 4
gpt4 key购买 nike

任何处理 ViewPager2 + Fragments + GoogleMap 的人?

我遇到了一个非常有趣的问题,在我的 viewpager 中,我有两个选项卡,每个选项卡都呈现 fragment 。

其中一个 fragment 生成了一张谷歌地图。

当我尝试通过该 map 进行操纵时,我得到了 viewpager2 试图左右滑动的效果,这真的很烦人,所以我为解决它所做的事情并不是那么好。

我通过构造函数将 viewpager 暴露给 fragment 之一,并触发了顶部 viewpager Activity 的回调。

在那里我执行了一个简单的isUserInputEnabled使用逻辑,本地图处于 Activity 状态时禁用滑动。

一旦 fragment 附加此回调寄存器并调用逻辑。

一旦 fragment 分离,此回调调用逻辑以重新启用。

这是一个解决方案,但 imo 并不好。有更好的想法吗?

与 View 重叠滑动对我来说似乎是一个错误。

/* top activity that hosts viewpager2 and it's tabs(fragments) */
class ViewTap extends AppCompatActivity
all the good stuff about viewpager2: ViewPager2
fun registerUi(){
...TapPagerAdapter(...this)
}
override fun fireSensitivityResolver(fragment: Fragment, flag: Boolean){
if(fragment is ViewMapLoader){
this.mViewPager2.isUserInputEnabled = !flag
}
}

/* callback defintion fo handling events about Tab Capale thingies */
interface TabCapableIf {
fun fireSensitivityResolver(fragment: Fragment, flag: Boolean)
}

/* the adapter for viewpager2 */
class TapPagerAdapter(...private val vt: ViewTap) : FragmentStateAdapter(fm,lc){
override fun createFragment(position: Int): Fragment {
return when(position) {
....
CROWD_FRAGMENT -> { ViewCrowd(vmf, vt) }
}
}

/* the fragment where the recycler view shows */
class ViewCrowd(...,val vt: ViewTap) : Fragment(){
fun subscribeUi(){
some recycler adapter = ItemViewCrowdsAdapter(...,this)
}
}

/* the card adapter for the recycler view , when a card is clicked transition to map view */
class ItemViewCrowdsAdapter(...,private val vc: ViewCrowd) : AdapterFragmentRecyclerView(vm) {
override fun onBindViewHolder(holder: ItemHolder, position: Int){
...holder.itemView.setOnClickListener{
... fragmentTransaction.replace(R.id.layout_view_crowd_root, ViewMapLoader(...,vc.vt))
}
}
}

/* the map loader context that shows the map and handles adjusting the sensitivity so that viewpager2 swipe doesn't overlap with map swipe functionality. otherwise as i try swiping on the map the viewpager2 also swipes. */
class class ViewMapLoader(...,private val vt: ViewTap) : Fragment() {
private lateinit var mTabCapableIf: TabCapableIf
override fun onAttach(...){
this.mTabCapableIf = this.vt
mTabCapableIf.fireSensitivityResolver(this,true)
}

override fun onDetach(){
mTabCapableIf.fireSensitivityResolver(this,false)
}
}

最佳答案

尝试覆盖 MapView 以抑制触摸事件

public class MapViewInScroll extends MapView {
public MapViewInScroll(Context context) {
super(context);
}

public MapViewInScroll(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}

public MapViewInScroll(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}

public MapViewInScroll(Context context, GoogleMapOptions googleMapOptions) {
super(context, googleMapOptions);
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev);
}

}

并在您的 xml 布局中使用它而不是原始 MapView
                    <YOUR_PACKAGE.SOME_PATH_TO_VIEW.MapViewInScroll
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />

关于android - Google Map + ViewPager2 刷卡冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61023565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com