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 在可见性消失时占用了额外的空间

除了 onCreate 方法之外,无法更改视图的可见性

Xamarin:Java 绑定项目 - 无法更改本地界面的可见性

在活动中更改列表视图的按钮可见性

检测片段内的 ViewPager 选项卡更改

检测片段内的 ViewPager 选项卡更改