内容未显示在Fragment TabLayout Android中

时间:2017-03-01 14:57:04

标签: android android-fragments android-recyclerview android-tablayout

我花了一整天时间试图解决这个问题,但我做不到。

在我的Android应用程序中,我有一个mainActivity HomePageServices,它有3个选项卡:HomeActivity,ProfileActivity和SettingsActivity。

这些标签是由TabLayout和ViewPager调用的片段。 选项卡之间的过渡完美,但问题是我没有任何片段显示!

我想在HomeActivity中显示带有GridLayout卡片的RecyclerView。

这是我到目前为止所做的:

HomePageServices

    public class HomePageServices extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();

        //Toolbar
        initCollapsingToolbar();

        //tabs
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new 

TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

    /**
     * Initializing collapsing toolbar
     * Will show and hide the toolbar title on scroll
     */
       private void initCollapsingToolbar() {
            final CollapsingToolbarLayout collapsingToolbar =
                    (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
            collapsingToolbar.setTitle(" ");
            AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
            appBarLayout.setExpanded(true);

    // hiding & showing the title when toolbar expanded & collapsed
    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        boolean isShow = false;
        int scrollRange = -1;
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                if (scrollRange == -1) {
                    scrollRange = appBarLayout.getTotalScrollRange();
                }
                if (scrollRange + verticalOffset == 0) {
                    collapsingToolbar.setTitle(getString(R.string.app_name));
                    isShow = true;
                } else if (isShow) {
                    collapsingToolbar.setTitle(" ");
                    isShow = false;
                }
            }
        });
    }
}

HomePageServices XML布局:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:fitsSystemWindows="true"
    >

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleTextAppearance="@android:color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

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

                <ImageView
                    android:id="@+id/backdrop"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:fitsSystemWindows="true"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode="parallax"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentStart="true" />

                <TextView
                    android:id="@+id/love_music"
                    android:layout_width="237dp"
                    android:layout_height="wrap_content"
                    android:text="@string/backdrop_title"
                    android:textColor="@android:color/white"
                    android:textSize="@dimen/backdrop_title"
                    android:gravity="center_horizontal|center"
                    android:layout_gravity="center_horizontal|center"
                    android:layout_centerHorizontal="true" />

                <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/ThemeOverlay.AppCompat.Light"
                    android:layout_centerVertical="true">

                    <android.support.design.widget.TabLayout
                        android:layout_height="wrap_content"
                        android:layout_width="match_parent"
                        android:id="@+id/tab_layout">

                        <android.support.design.widget.TabItem
                            android:icon="@drawable/ic_home_white_24dp"
                            android:layout_height="match_parent"
                            android:layout_width="match_parent"/>

                        <android.support.design.widget.TabItem
                            android:icon="@drawable/ic_perm_identity_white_24dp"
                            android:layout_height="match_parent"
                            android:layout_width="match_parent"/>

                        <android.support.design.widget.TabItem
                            android:icon="@drawable/ic_settings_white_24dp"
                            android:layout_height="match_parent"
                            android:layout_width="match_parent"/>

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

                    <android.support.v4.view.ViewPager
                        android:id="@+id/pager"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:layout_below="@id/tab_layout"
                  app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
                </android.support.v7.widget.Toolbar>
            </RelativeLayout>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

PagerAdapter:

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            ProfileActivity tab1 = new ProfileActivity();
            return tab1;
        case 1:
            SettingsActivity tab2 = new SettingsActivity();
            return tab2;
        case 2:
            HomeActivity tab3=new HomeActivity();
            return tab3;

        default:
            return null;
    }
}

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

HomeActivity

public class HomeActivity extends Fragment {

private RecyclerView recyclerView;
public static ServicesAdapter homeAdapter;
public static List<Service> serviceList;
final static String ADD_NEW_ITEM_TYPE="add new item";

public HomeActivity () {
    //empty constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //cards
    View rootView=inflater.inflate(R.layout.activity_home2, container, false);
    TextView tt= (TextView) rootView.findViewById(R.id.textView3);
   recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
    serviceList = new ArrayList<>();
    homeAdapter = new ServicesAdapter(this.getContext(), serviceList);
    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    initServices();
    recyclerView.setAdapter(homeAdapter);
    Log.d("show me what you got", serviceList.toString());
    Toast.makeText(this.getContext(),"Hiiiiiiiiiiiiiiii from the other side",Toast.LENGTH_SHORT).show();

    return rootView;
}

public static class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
     int spanCount;
     int spacing;
     boolean includeEdge;
    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }
}

private  int dpToPx(int dp) {
    Resources r = getResources();
    return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}

public void initServices () {
    Service a = new Service(ADD_NEW_ITEM_TYPE);
    serviceList.add(a);
    //just for testing
    a = new Service("Signaler a dysfonctionnement");
    serviceList.add(a);
    a = new Service("Activités inter-employés");
    serviceList.add(a);
    homeAdapter.notifyDataSetChanged();
}
}

HomeActivity XML布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_home2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="HomeActivity">
<include layout="@layout/content_main"
    />
    <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true"
        android:layout_marginStart="42dp"
        android:id="@+id/textView3" />
    </RelativeLayout>

最后是 RecyclerView 布局:

<RelativeLayout 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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
  tools:context="HomePage.HomeActivity"
    tools:showIn="@layout/activity_home2">
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipToPadding="false"
    android:scrollbars="vertical"
    android:paddingLeft="5dp" />
</RelativeLayout>

PS :在创建标签之前,RecyclerViewer成功地在活动中显示了卡片而没有任何问题。

0 个答案:

没有答案