with studio example español creating activity android android-studio android-viewpager android-tabs android-tabbed-activity

example - tabs android studio material design



Pestañas de barra de acciones anidadas(con ViewPager) (2)

Tengo un proyecto que usa Action Bar Tabs (con ViewPager). Las pestañas se mueven realmente sin problemas al deslizar entre ellas, pero necesito agregar dos pestañas secundarias, en la PESTAÑA 2, luego pasar a las pestañas siguientes o, por supuesto, volver, como en Glassdoor o Flipboard.

Por favor ayuda.

Actividad principal

public class MainActivity extends AppCompatActivity { private SectionsPagerAdapter mSectionsPagerAdapter; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(mViewPager); } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return Tab1Fragment.newInstance(); case 1: return Tab2Fragment.newInstance(); default: return Tab3Fragment.newInstance(); } } @Override public int getCount() { // Show 3 total pages. return 3; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "Tab 1"; case 1: return "Tab 2"; case 2: return "Tab 3"; } return null; } } }

activity_main.xml

<android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/appbar_padding_top" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />

Tab2Fragment- donde quiero anidar SubTab1Fragment y SubTab2Fragment

public class Tab2Fragment extends Fragment { private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; public Tab2Fragment() { // Required empty public constructor } // TODO: Rename and change types and number of parameters public static Tab2Fragment newInstance() { Tab2Fragment fragment = new Tab2Fragment(); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_tab2, container, false); } }

fragment_tab2.xml

<FrameLayout 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" tools:context="com.r3dm4n.testprojectapp.Tab2Fragment"> <!-- TODO: Update blank fragment layout --> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" />


Me di cuenta de esto. También publiqué un proyecto de demostración en Github

En MainActivity necesitas devolver un nuevo Fragment para el que quieres "anidado" como este:

@Override public Fragment getItem(int position) { switch (position) { case 0: return Tab1Fragment.newInstance(); case 1: return new Tab2Fragment(); default: return Tab3Fragment.newInstance(); }

En el fragmento TAB2, donde desee los otros fragmentos anidados, realice los siguientes cambios:

public class Tab2Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_tab2, container, false); ViewPager mViewPager = (ViewPager) view.findViewById(R.id.container_main); SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); return view; } private class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return Nest1Fragment.newInstance(1); default: return Nest2Fragment.newInstance(2); } } @Override public int getCount() { // Show 4 total pages. return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "Nested 1"; default: return "Nested 2"; } } } }

fragment_tab2.xml

<android.support.v4.view.ViewPager android:id="@+id/container_main" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_scrollFlags="scroll|enterAlways"> <android.support.design.widget.TabLayout android:id="@+id/tabs2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> </android.support.v4.view.ViewPager>


Eche un vistazo a esta respuesta. Podría ayudar

ViewPager anidado en ViewPager

También al agregar sub pestañas, puede agregar una condición como esta en el oyente para pasar a la siguiente pestaña

if(mPager.getCurrentItem() >=2) mParentPager.setCurrentItem()=mParentPager.getCurrenItem()+1

Esto para pasar a la pestaña anterior

if(mPager.getCurrentItem() ==0) mParentPager.setCurrentItem()=mParentPager.getCurrenItem()-1