Tabs layout with snippets
I am trying to load different snippets in each tab using Android Tablayout and PagerAdapter. The tabs work fine, but the corresponding snippet is not loading on my scree. Here is the code:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Tab1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab1, container, false);
}
}
There are only 3 classes of tabs created for each XML fragment. Here is my xml for the snippet:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Tab 1"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</RelativeLayout>
My Activity class:
import android.app.ActionBar;
import android.content.Intent;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;
import java.util.logging.Logger;
public class DashboardActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{
//This is our tablayout
private TabLayout tabLayout;
//This is our viewPager
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
//Adding toolbar to the activity
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing the tablayout
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
//Adding the tabs using addTab() method
tabLayout.addTab(tabLayout.newTab().setText("Your Tab Title"));
tabLayout.addTab(tabLayout.newTab().setText("Your Tab Title"));
tabLayout.addTab(tabLayout.newTab().setText("Your Tab Title"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
//Initializing viewPager
viewPager = (ViewPager) findViewById(R.id.pager);
//Creating our pager adapter
Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount());
//Adding adapter to pager
viewPager.setAdapter(adapter);
//Adding onTabSelectedListener to swipe views
tabLayout.setOnTabSelectedListener(this);
}
@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) {
}
}
My pager adapter class:
public class Pager extends FragmentStatePagerAdapter {
//integer to count number of tabs
int tabCount;
//Constructor to the class
public Pager(FragmentManager fm, int tabCount) {
super(fm);
//Initializing tab count
this.tabCount= tabCount;
}
//Overriding method getItem
@Override
public Fragment getItem(int position) {
//Returning the current tabs
switch (position) {
case 0:
Tab1 tab1 = new Tab1();
return tab1;
case 1:
Tab2 tab2 = new Tab2();
return tab2;
case 2:
Tab3 tab3 = new Tab3();
return tab3;
default:
return null;
}
}
//Overriden method getCount to get the number of tabs
@Override
public int getCount() {
return tabCount;
}
}
Taskbar layout file:
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="368dp"
android:layout_height="wrap_content"
app:tabMode="fixed"
tools:layout_editor_absoluteX="8dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
android:onClick="loadOption"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:color/white"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="8dp"
tools:ignore="MissingConstraints" />
Styles.xml file:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
Any suggestions.
source to share
If not, place your main layout inside a LinearLayout or another ViewGroup. If you go to LinearLayout:
layout_height
for viewpager - 0dp. Change it to match_parent
and also to layout_width
.
Delete linear_layout weight="1"
You can also add android:layout_marginTop="?android:actionBarSize"
to have the view pager under the action bar.
source to share
Use tabLayout.setupWithViewPager(viewPager)
.............
.....................
//Adding adapter to pager
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager)
//Adding onTabSelectedListener to swipe views
tabLayout.setOnTabSelectedListener(this);
...........
....................
source to share
try this, hope it helps you.
PagerAdapter class
public class HomeViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList = new ArrayList<>();
private List<String> mTitleList = new ArrayList<>();
public HomeViewPagerAdapter(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);
mTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mTitleList.get(position);
}
}
MyActivity class
HomeViewPagerAdapter homeViewPagerAdapter = new HomeViewPagerAdapter(getChildFragmentManager());
// add whichever fragments you want to add
homeViewPagerAdapter.addFragment(new Fragment(), "yourfragment");
viewpager.setAdapter(homeViewPagerAdapter);
viewpager.setOffscreenPageLimit(2);
tabLayout.setupWithViewPager(viewpager);
source to share