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.

+3


source to share


6 answers


add this line and you are good to go



viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(
            tabLayout));

      

+1


source


You need to add the following line to onCreate()

your activity method :



viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

      

+2


source


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.

+2


source


You did everything well, but you missed one line that binds the viewpager to the display tab or tab,

tabLayout.setupWithViewPager(viewPager);

      

Try this might help you.

+1


source


Use tabLayout.setupWithViewPager(viewPager)

    .............
    .....................

    //Adding adapter to pager
    viewPager.setAdapter(adapter);

    tabLayout.setupWithViewPager(viewPager)

    //Adding onTabSelectedListener to swipe views
    tabLayout.setOnTabSelectedListener(this);

    ...........
    ....................

      

0


source


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);

      

0


source







All Articles