0

I am using a library for sliding tabSmartTabLayout - ogaclejapan. I want to add one more sliding tab inside one tab of parent sliding tab. But when I do so I can't see the second sliding tab.

Refer the imageFirst is the parent sliding tab. And in 'trains' I am adding another same sliding tab

Here is the MainActivity which contains the parent sliding tab.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"

android:id="@+id/root"
tools:context="com.virtualsquadz.letsgo.MainActivity">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:id="@+id/topBar"
    android:layout_marginTop="@dimen/_16sdp"
    android:paddingBottom="@dimen/_5sdp">
    <ImageButton
        android:layout_width="wrap_content"
        android:id="@+id/backButton"
        android:layout_height="wrap_content"
        android:src="@drawable/back_0"
        android:background="@null"
        android:layout_alignParentLeft="true"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title_transport"
        android:text="Getting Around"
        style="@style/title_transport"
        android:paddingTop="@dimen/_2sdp"
        android:layout_centerInParent="false"
        android:layout_centerHorizontal="true"
        />

</RelativeLayout>
<com.ogaclejapan.smarttablayout.SmartTabLayout
    android:id="@+id/viewpagertab"
    android:layout_below="@id/topBar"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    app:stl_indicatorAlwaysInCenter="false"
    app:stl_indicatorWithoutPadding="false"
    app:stl_indicatorInFront="false"
    app:stl_indicatorInterpolation="smart"
    app:stl_indicatorGravity="bottom"
    app:stl_indicatorColor="#40C4FF"
    app:stl_indicatorThickness="4dp"
    app:stl_indicatorWidth="auto"
    app:stl_indicatorCornerRadius="2dp"
    app:stl_overlineColor="#4D000000"
    app:stl_overlineThickness="0dp"
    app:stl_underlineColor="#4D000000"
    app:stl_underlineThickness="1dp"
    app:stl_dividerColor="#4D000000"
    app:stl_dividerThickness="1dp"
    app:stl_defaultTabBackground="?attr/selectableItemBackground"
    app:stl_defaultTabTextAllCaps="true"
    app:stl_defaultTabTextColor="@color/flight_white"
    app:stl_defaultTabTextSize="@dimen/_12sdp"
    app:stl_defaultTabTextHorizontalPadding="@dimen/_16sdp"
    app:stl_defaultTabTextMinWidth="0dp"
    app:stl_distributeEvenly="true"
    app:stl_clickable="true"
    app:stl_titleOffset="24dp"
    app:stl_drawDecorationAfterTab="false"
    />

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/viewpagertab"
    android:layout_marginTop="@dimen/_5sdp"
    />


</RelativeLayout>

MainActivity.java

SmartTabLayout viewPagerTab = (SmartTabLayout)      findViewById(R.id.viewpagertab);
    ViewPager viewPager=(ViewPager)findViewById(R.id.viewpager) ;

    ViewPagerItemAdapter adapter = new ViewPagerItemAdapter(ViewPagerItems.with(this)
            .add(R.string.transportOption1, R.layout.activity_flights)
            .add(R.string.transportOption2, R.layout.activity_train)
            .add(R.string.transportOption3, R.layout.activity_buses)
            .add(R.string.transportOption4, R.layout.activity_cars)
            .create());

    viewPager.setAdapter(adapter);
    viewPagerTab.setViewPager(viewPager);

Similary I designed for 'trains' inside train.java

SmartTabLayout viewPagerTab = (SmartTabLayout) findViewById(R.id.viewpagertab2);
    ViewPager viewPager=(ViewPager)findViewById(R.id.viewpager2) ;

    ViewPagerItemAdapter adapter = new ViewPagerItemAdapter(ViewPagerItems.with(this)
            .add(R.string.trainSearchOption1, R.layout.trainsearchoption1)
            .add(R.string.trainSearchOption2, R.layout.trainsearchoption2)
            .create());

    viewPager.setAdapter(adapter);
    viewPagerTab.setViewPager(viewPager);

I tried to find the solution from here. But unfortunately I couldn't find an answer. If you are wondering which ViewPager should be called if they are nested then take a situation as example - First child view pager is called when swipping left / right and when we are at extreme end of left / right respectively of child view pager then parent view pager is called. Or we can also click on tabs of parent to change it.

Swarnveer
  • 490
  • 5
  • 23

1 Answers1

0

Google Material Design guidelines doesn't allow using nested tabs. It is a bad programming practice.

It is highly recommend to modify your UI to conform to Google design guidelines.

AlphaQ
  • 656
  • 8
  • 18
  • Can you suggest an alternative – Swarnveer Nov 17 '16 at 18:23
  • Alternatives are based on your app requirements. It depends on what you want your app to do. You can add other nifty workarounds like drop downs, buttons, grid items etc. It totally depends on your app requirements. – AlphaQ Nov 17 '16 at 18:26