【问题标题】:How to get several ViewPagers into a ScrollView?如何将多个 ViewPagers 放入一个 ScrollView?
【发布时间】:2012-06-01 15:06:09
【问题描述】:

我正在尝试实现一个布局,其中包含一个 ViewPagers 列表。每个 ViewPager 都可以独立滑动。请参阅下面图片的链接。

picture of the layout

我尝试使用 ScrollView 和带有 ViewPagers 的 LinearLayout,但我只显示了一个 ViewPager。甚至可以在一个屏幕上获得多个 ViewPager 吗?

到目前为止我的代码: main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager2"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager3"
            android:layout_width="wrap_content"
            android:layout_height="100dp" />
    </LinearLayout>

</ScrollView>

MainActivity

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ViewPagerAdapter adapter2 = new ViewPagerAdapter( this );
        ViewPager pager = (ViewPager)findViewById( R.id.viewpager2 );
        pager.setAdapter( adapter2 );

        ViewPagerAdapter adapter3 = new ViewPagerAdapter( this );
        ViewPager pager3 =
            (ViewPager)findViewById( R.id.viewpager3 );
        pager3.setAdapter( adapter3 );   
    }

}

有什么想法吗? 谢谢! 编辑:这段代码确实有效!

【问题讨论】:

    标签: android scrollview swipe android-viewpager


    【解决方案1】:

    使用多个 ViewPager 确实有些可疑。我正在膨胀几个视图,每个视图都持有一个 ViewPager,并且只有第一个 ViewPager 填充了来自其适配器的数据。但是,如果我给每个 ViewPager 一个唯一的 id,它们都会被填充。

    我有一个容器,其唯一的孩子是 ViewPager:

    ViewPager pager = (ViewPager) pagerContainer.getChildAt(0);
             pager.setId(i);
    

    其中i 是循环的正索引。

    【讨论】:

    • 感谢您的回答,它帮助我解决了仅添加了一个查看器的子视图的问题。我使用 mViewPager.setID(sViewPagerID++) 使资源 id 唯一,sViewPagerID 是类引用 viewpager 的静态成员
    • 可以从 API 17 ++ 调用 View.generateViewId()
    • 对我来说绝对是正确的答案。让我发疯了好几天,我只是不明白为什么第一个下面的所有其他浏览器的片段都没有显示!谢谢!
    • 哇,谢谢,这对我很有帮助,如果没有这个,我想我永远也弄不明白。正在以编程方式在视图上添加查看器,但它们不起作用,只是第一个。在给每个人一个特定的 ID 后,它开始像魅力一样工作!
    • 谢谢,对我也有帮助,但我对 i=0 有问题,我建议从 i=1 开始。
    【解决方案2】:

    问题与 ViewPager 的默认高度有关,因为默认情况下它采用 "fill_parent" ,我们无法使用 "wrap_content" 重置它。 我发现将高度固定为某个硬代码值的解决方案将返回所有显示在屏幕上的视图寻呼机项目。

    我知道这是一些可疑的解决方案,但它对我来说很好,我希望它对你有用。

    【讨论】:

      【解决方案3】:

      在您的 LinearLayout 上,在您的 XML 中。设置android:weightSum="2"。对于每个浏览器,设置android:layout_weight="1"。此外,将 LinearLayout 的每个子项的高度设置为 0dp。这应该可以解决问题

      【讨论】:

      • weightSum=2 和每个 layout_weight=1 都不起作用。当我将每个孩子的高度设置为 0dp 时,它们根本不会出现。
      • 其实是MainActivity出错了。在错误的 ViewPager 上使用了 setAdapter :) 无论如何感谢 weightSum 的提示!
      • @KiberNet:您好,我有同样的问题。我正在正确设置采用者。并尝试使用 wgightsum。没有进展。事实上,如果我在 Scrollview 中 ViewPagers 就像你确实查看寻呼机本身没有显示。如果您有任何想法,请帮助我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2015-03-15
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多