activity_home.xml(请注意我如何将 TabLayout 嵌套在 ViewPager 下,如 here 所述)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/main_activity_DrawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".HomeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:elevation="2dp" />
</android.support.v4.view.ViewPager>
</LinearLayout>
<!-- The navigation drawer -->
<include layout="@layout/navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
HomeActivity.java
public class HomeActivity extends AppCompatActivity {
// Declaring Your View and Variables
Toolbar mToolbar;
ViewPager mViewPager;
ViewPagerAdapter mViewPagerAdapter;
TabLayout mSlidingTabs;
CharSequence mTabTitles[] = {"Home", "Events"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
initSlidingTabs();
}
private void initSlidingTabs() {
mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), mTabTitles);
// Assigning ViewPager View and setting the mViewPagerAdapter
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mViewPagerAdapter);
////也尝试了以下但没有任何改变 //mSlidingTabs = (TabLayout) findViewById(R.id.tabs); //mSlidingTabs.addTab(mSlidingTabs.newTab().setText("Tab 1")); //mSlidingTabs.addTab(mSlidingTabs.newTab().setText("Tab 2")); //mSlidingTabs.setupWithViewPager(mViewPager); }
ViewPagerAdapter.java
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
CharSequence mTabTitles[]; // This will Store the mTabTitles of the Tabs which are Going to be passed when ViewPagerAdapter is created
// Build a Constructor and assign the passed Values to appropriate values in the class
public ViewPagerAdapter(FragmentManager fm, CharSequence mTitles[]) {
super(fm);
this.mTabTitles = mTitles;
}
//This method return the fragment for the every position in the View Pager
@Override
public Fragment getItem(int position) {
if(position == 0) // if the position is 0 we are returning the First tab
{
Tab1 tab1 = new Tab1();
return tab1;
}
else // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
{
Tab2 tab2 = new Tab2();
return tab2;
}
}
// This method return the titles for the Tabs in the Tab Strip
@Override
public CharSequence getPageTitle(int position) {
return mTabTitles[position];
}
// This method return the Number of tabs for the tabs Strip
@Override
public int getCount() {
return mTabTitles.length;
}
}
Tab1.java
public class Tab1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_1,container,false);
return v;
}
}
最佳答案
我现在也有同样的问题。
通过在 ViewPager
中嵌套 TabLayout
来遵循 Google 的文档不工作。
按照 Google 的文档将 PagerTabStrip
嵌套在 ViewPager
中确实有效。
解决方案
不要将TabLayout
嵌套在ViewPager
中。将它紧挨着 ViewPager
放置。
关于android - 标签不显示 Tablayout + ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323183/