ViewPager 更改可见性后无法滑动
Posted
技术标签:
【中文标题】ViewPager 更改可见性后无法滑动【英文标题】:ViewPager unable to swipe after changing visibility 【发布时间】:2015-03-20 01:07:31 【问题描述】:我有一个带有 ViewPager 的 Activity。在这个 ViewPager 中有 4 个片段。其中一个片段(我们称之为 MyListFragment)在 RelativeLayout 中有一个带有 ListView 和 MapView(Google 地图 V2)的布局文件。一次只能看到这 2 个视图中的一个。最初,ListView 是可见的,而 MapView 消失了。我有一个 Button,当我单击它时,我会切换可见性:ListView 变为已消失,MapView 变为可见。当我再次单击它时,MapView 设置为消失,ListView 设置为可见。你得到图片。 现在问题如下:在将 MapView 设置为消失并将 ListView 设置为可见后,ViewPager 将不再滑动。相反,所有触摸事件都转到 ListView(这是一个正常的垂直 ListView)。我分几步将其分解,并检查何时可以或不能滑动 ViewPager。
-
ListView 可见,MapView 消失:一切正常。
将 ListView 设置为消失:一切正常。
将 ListView 重新设置为可见:一切正常。
将 ListView 设置为消失,将 MapView 设置为可见,将 MapView 设置为消失:一切正常。
将 ListView 设置为可见:!!! ViewPager 不会再在此 Fragment 上滑动!!!
将 ListView 设置为消失:一切正常。
这很奇怪,因为步骤 5 似乎与步骤 1 的状态相同。这是我的布局文件:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<ListView
android:id="@+id/listView"
android:layout_
android:layout_
android:paddingLeft="@dimen/fragment_padding"
android:paddingRight="@dimen/fragment_padding"
android:paddingBottom="@dimen/list_padding_bottom"
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"/>
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_
android:layout_
android:visibility="gone"/>
<Button
android:id="@+id/button_switch"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/fragment_padding"
android:layout_marginLeft="@dimen/fragment_padding"
android:layout_marginRight="@dimen/fragment_padding"
android:text="Show on map"/>
下面是一些onCreateView
代码:
this.listView = (ListView) view.findViewById(R.id.listView);
this.mapView = (MapView) view.findViewById(R.id.mapView);
this.mapView.onCreate(savedInstanceState);
this.mapView.getMapAsync(this);
以下是按钮的 onClick 中发生的情况:
if(this.listView.getVisibility() == View.VISIBLE)
this.listView.setVisibility(View.GONE);
this.mapView.setVisibility(View.VISIBLE);
this.buttonSwitch.setText("Show in list");
else
this.listView.setVisibility(View.VISIBLE);
this.mapView.setVisibility(View.GONE);
this.buttonSwitch.setText("Show on map");
如果我需要提供另一段代码,请告诉我。任何帮助将不胜感激,因为我似乎无法找到此错误的原因。
【问题讨论】:
同样的问题!您有任何解决方案/解决方法吗? @MuhammadBabar 我找到了一种解决方法,但它并不理想。从地图切换到列表时,我禁用了地图上的所有手势。当我切换回来时,我会再次启用它们。 谢谢伙计,虽然我也设法解决了这个问题,但你的似乎很容易! 谢谢,它也对我有用。 【参考方案1】:只需启用和禁用如下:-
java:-
googleMap.getUiSettings().setAllGesturesEnabled(false); // true / false with Visible / Gone
科特林:-
googleMap?.uiSettings?.setAllGesturesEnabled(false)
【讨论】:
以上是关于ViewPager 更改可见性后无法滑动的主要内容,如果未能解决你的问题,请参考以下文章
Coordinatorlayout 中的 VIewpager 在可见性消失时占用了额外的空间