簡體   English   中英

帶有TabLayout的ViewPager不顯示片段

[英]ViewPager with TabLayout not displaying the fragments

我正在嘗試創建如下截圖的布局:

布局截圖

下面是相同的布局XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".DetailActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/iv_movie_backdrop"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:contentDescription="@string/str_movie_backdrop_image"
                android:scaleType="fitXY" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>


    <android.support.v4.widget.NestedScrollView xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="8dp"

        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v7.widget.CardView
                android:id="@+id/cv_poster_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:elevation="@dimen/card_elevation"
                app:cardCornerRadius="8dp"
                app:cardUseCompatPadding="true">

                <ImageView
                    android:id="@+id/iv_movie_poster"
                    android:layout_width="150dp"
                    android:layout_height="wrap_content"
                    android:contentDescription="@string/str_movie_poster"
                    android:padding="@dimen/poster_padding"
                    android:scaleType="fitXY"
                    android:src="@drawable/not_found" />
            </android.support.v7.widget.CardView>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toEndOf="@id/cv_poster_image"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/tv_movie_title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="64dp"
                    android:layout_marginStart="8dp"
                    android:padding="@dimen/poster_padding"
                    android:textAppearance="?android:textAppearanceMedium"
                    android:textColor="@android:color/black"
                    android:textStyle="bold"
                    tools:text="Spider Man and Iron Man" />

                <TextView
                    android:id="@+id/tv_release_date"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:drawablePadding="@dimen/poster_padding"
                    android:drawableStart="@drawable/ic_date_range_black_24dp"
                    android:gravity="start"
                    android:padding="@dimen/poster_padding"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:textColor="@android:color/black"
                    tools:text="March, 2017" />

                <TextView
                    android:id="@+id/tv_rating"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:drawablePadding="@dimen/poster_padding"
                    android:drawableStart="@drawable/ic_star_black_24dp"
                    android:gravity="start"
                    android:padding="@dimen/poster_padding"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:textColor="@android:color/black"
                    tools:text="7.1" />

                <TextView
                    android:id="@+id/tv_genre"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:padding="@dimen/poster_padding"
                    android:textAppearance="?android:textAppearanceSmall"
                    android:textColor="@android:color/black"
                    android:textStyle="italic"
                    tools:text="Horror | Comedy | Drama" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/cv_poster_image"
                android:orientation="vertical">

                <android.support.design.widget.TabLayout
                    android:id="@+id/sliding_tabs"
                    style="@style/CategoryTab"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:tabGravity="fill" />

                <android.support.v4.view.ViewPager
                    android:id="@+id/viewPager"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />

            </LinearLayout>
        </RelativeLayout>
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end"
        app:srcCompat="@drawable/ic_favorite_black_24dp" />

</android.support.design.widget.CoordinatorLayout>

我的問題是帶有ViewPager的TabLayout,我無法用任何FragmentLayout來膨脹ViewPager。 如果我將相同的TabLayout和ViewPager復制到新的布局,我可以給FragmentLayout充氣甚至滑動工作。

所以是因為我只能在活動中擁有TabLayout和ViewPageralone,並且不能在它們之上擁有任何其他視圖。

嘗試將android:fillViewport="true"到您的NestedScrollView

在你的Xml中:

<android.support.v4.widget.NestedScrollView
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:fillViewport="true"   //add this
   app:layout_behavior="@string/appbar_scrolling_view_behavior">

   <android.support.v4.view.ViewPager
       android:id="@+id/viewpager"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>  //change height to match parent
</android.support.v4.widget.NestedScrollView>

在你的活動的oncreate()中使用它

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setupWithViewPager(viewPager);

並將以下方法和適配器復制到您的活動中

private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new 
ViewPagerAdapter(getSupportFragmentManager());

 //change the fragmentName as per your need

    adapter.addFragment(new FirstFragment(), "OVERVIEW");
    adapter.addFragment(new Secondfragment(), "TRAILER");
    adapter.addFragment(new thirdFragment(), "ORDERS");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM