with viewpager studio fragments example activity android android-fragments tabs

viewpager - tabs android material design



Fragmento de pestaƱas dentro de Fragmento (2)

Vea a continuación la respuesta que obtuve con el uso de pestañas de fragmentos dentro de las pestañas de fragmentos que están en mi MainActivity

Dentro de mi fragmento usando getChildFragmentManager ()

public class FixturesTabs extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fixtures_new_tabs,container, false); // Setting ViewPager for each Tabs ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager); setupViewPager(viewPager); // Set Tabs inside Toolbar TabLayout tabs = (TabLayout) view.findViewById(R.id.fixture_tabs); tabs.setupWithViewPager(viewPager); return view; } // Add Fragments to Tabs private void setupViewPager(ViewPager viewPager) { Adapter adapter = new Adapter(getChildFragmentManager()); adapter.addFragment(new TodaysFixturesFragment(), "Today"); adapter.addFragment(new WeekFixturesFragment(), "Week"); adapter.addFragment(new MonthFixturesFragment(), "Month"); adapter.addFragment(new AllFixturesFragment(), "Month"); adapter.addFragment(new MyTeamsFixturesFragment(), "My Teams"); viewPager.setAdapter(adapter); } static class Adapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public Adapter(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); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } }

Y mi XML se llama "fixtures_new_tabs.xml" para que coincida con el diseño inflado

<?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.support.design.widget.CoordinatorLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.TabLayout android:id="@+id/result_tabs" android:background="@color/grey" app:tabTextColor="@color/medium_grey" app:tabSelectedTextColor="@color/colorPrimary" app:tabIndicatorColor="@color/colorPrimary" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> </RelativeLayout>

Espero que esto ayude o señale a otros en la dirección de su solución.

Tengo en mi Actividad Principal una barra de navegación de acción usando pestañas usando Fragmentos (con Diseño de Material), como a continuación, que funciona bien, pero ahora deseo tener navegación con pestañas dentro de mis Fragmentos ...

// Add Fragments to Tabs in Main Activity private void setupViewPager(ViewPager viewPager) { Adapter adapter = new Adapter(getSupportFragmentManager()); adapter.addFragment(new FeedsFragment(), "Latest Updates"); adapter.addFragment(new ClubTeamsFragment(), "Club Teams"); adapter.addFragment(new FixturesFragment(), "Fixtures"); adapter.addFragment(new ResultsFragment(), "Results"); adapter.addFragment(new ClubFieldsFragment(), "Club Fields"); viewPager.setAdapter(adapter); }

Estoy bastante seguro de que TabHost ahora está en desuso.

Deseo lograr la imagen adjunta. Las pestañas azules están en el nivel de Actividad principal y las pestañas de fecha gris están en la vista de fragmento seleccionada.

He leído algunas publicaciones sobre el uso de Tab Host o Fragment Activity, o utilizo Activity que se extiende a Fragment?


Para hacer una respuesta más completa a la de BENN1TH, lo que hice fue arrojar un fragmento del ActivityMain con las pestañas.

public class MainActivity extends AppCompatActivity { Button throwFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); throwFragment = (Button) findViewById(R.id.throwFragment); //I add a fragment at run time throwFragment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //I get the fragments manager instance FragmentManager fragmentManager = getSupportFragmentManager(); //I create a transaction FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //I create a new fragment and add it to the layout of the activity FixturesTabs fixturesTabs = new FixturesTabs(); fragmentTransaction.replace(R.id.containerTabs, fixturesTabs); //I confirm the change fragmentTransaction.commit(); } }); } }

activity_main.xml Diseño que pertenece a la actividad principal, donde creé un botón para lanzar el fragmento en tiempo de ejecución.

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="org.itdevelopers.braian.tabsinsidefragment.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" 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:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:id="@+id/containerTabs"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center"> <Button android:id="@+id/throwFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:text="I throw fragment with tabs" /> </LinearLayout> </android.support.design.widget.CoordinatorLayout>

IMPORTANTE : la actividad principal será el contexto del fragmento con las pestañas, y en el diseño de esto es necesario mencionar la importancia de la siguiente línea para seguir un estilo en el diseño.

Tiene la funcionalidad de hacer que la barra de herramientas de la actividad principal no se solape con el TabLayout del fragmento.

app:layout_behavior="@string/appbar_scrolling_view_behavior"

Lanzar un fragmento con pestañas puede ser muy útil cuando utilizas una barra de navegación inferior, porque si usamos las pestañas predeterminadas que están involucradas en una actividad, esto consumirá más recursos (mira esto en El Logcat de Android Studio con ''Sin filtros'' en milisegundos )

  • Moraleja de la historia *: es preferible usar TabbedFragment.

Es mi primer comentario en la comunidad, espero poder colaborar con algo. Gracias.