ScrollView中的两个ViewPagers - 第二个不可见

时间:2015-07-10 08:17:10

标签: android android-layout android-viewpager

我正在尝试使用ScrollView中的两个ViewPager创建布局。第一个将高度设置为所需大小,第二个应与其余布局匹配。问题是第二个ViewPager不可见。我究竟做错了什么?这是我的布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

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

            <android.support.v4.view.ViewPager
                android:id="@+id/gallery"
                android:layout_width="match_parent"
                android:layout_height="200dp" />

            <android.support.v4.view.ViewPager
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" />
        </LinearLayout>
    </ScrollView>

</FrameLayout>

我正在使用第二个ViewPager来显示Fragments(使用FragmentPagerAdapter),这是我的FragmentPagerAdapter代码:

public class MainPagerAdapter extends FragmentPagerAdapter {
    public MainPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            return new FirstFragment();
        case 1:
            return new SecondFragment();
        default:
            return new FirstFragment();
        }
    }

    @Override
    public int getCount() {
        return 2;
    }
}

FirstFragment代码:

public class FirstFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.first_step, container, false);
    }
}

first_step.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <View
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@android:color/holo_blue_light" />
    <View
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@android:color/holo_green_light" />  
</LinearLayout>

5 个答案:

答案 0 :(得分:0)

更改

 <android.support.v4.view.ViewPager
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical" />

<android.support.v4.view.ViewPager
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:orientation="vertical" />

以及

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

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

答案 1 :(得分:0)

如果您使用布局权重。您必须根据使用情况设置宽度或高度布局0dp

这为两个寻呼机提供了相等的空间 按比例给出重量,即2:1或2:1等

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

        <android.support.v4.view.ViewPager
            android:id="@+id/gallery"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <android.support.v4.view.ViewPager
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical" />
    </LinearLayout>

答案 2 :(得分:0)

你必须定义

android:layout_height="200dp"

除去

 android:layout_weight="1"

在两个viewpager可见后不设置 android:layout_height =“wrap_content”

答案 3 :(得分:0)

在ScollView中设置fillViewport = true。

我认为如果第二个ViewPager没有固定屏幕高度,ScollView就没用了。

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

答案 4 :(得分:0)

public class Student {

@SerializedName("exam_roll")
@Expose
private String examRoll;
@SerializedName("class_no")
@Expose
private String classNo;
@SerializedName("block_no")
@Expose
private String blockNo;
@Expose
private String name;

/**
* 
* @return
* The examRoll
*/
public String getExamRoll() {
return examRoll;
}

/**
* 
* @param examRoll
* The exam_roll
*/
public void setExamRoll(String examRoll) {
this.examRoll = examRoll;
}

/**
* 
* @return
* The classNo
*/
public String getClassNo() {
return classNo;
}

/**
* 
* @param classNo
* The class_no
*/
public void setClassNo(String classNo) {
this.classNo = classNo;
}

/**
* 
* @return
* The blockNo
*/
public String getBlockNo() {
return blockNo;
}

/**
* 
* @param blockNo
* The block_no
*/
public void setBlockNo(String blockNo) {
this.blockNo = blockNo;
}

/**
* 
* @return
* The name
*/
public String getName() {
return name;
}

/**
* 
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

}

所以你可以这样做,背景只是为了测试,你应该在项目中获得命运以匹配屏幕,而不仅仅是200 * 2:

case ViewPager is  a puzzle view,you must set the height for it,then it can
appear in you UI Screen,gallery dont have this problem;
why use ScrollView in this layout, i dont understand.
but,if you use linearlayout