Saltar al contenido

TabLayout de Android dentro del fragmento

este problema se puede resolver de variadas formas, pero nosotros te dejamos la que para nosotros es la resolución más completa.

Solución:

Después de buscar en su código, descubrí que se olvidó de devolver un fragmento en obtiene el objeto método de PagerAdapter que anuló del FragmentStatePagerAdapter y no hay una declaración de interrupción en cada caso debido a que cada vez que un null se devolvió el valor.

Para hacerlo, debe crear otro fragmento nuevo para cada página en ViewPager o puede crear un nuevo fragmento que pueda usar en todas las páginas de ViewPager.

No puede usar la misma vista de reciclaje en las pestañas del paginador de vista que ha definido en el fragmento principal.

activity_fragment_one.xml

 

    

        

    

    

He arreglado su fragmento y he creado un nuevo Fragmento que puede usar en ViewPager Pages.

public class NewFragment extends Fragment 

private RecyclerView mRecyclerView;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.activity_fragment_one, container, false);
    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.addTab(tabLayout.newTab().setText("A"));
    tabLayout.addTab(tabLayout.newTab().setText("B"));
    tabLayout.addTab(tabLayout.newTab().setText("C"));
    final ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
   // mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    //mRecyclerView.setLayoutManager(mLayoutManager);
    viewPager.setAdapter(new PagerAdapter(getFragmentManager(), tabLayout.getTabCount()));
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 

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

        
    );

    return view;


public class PagerAdapter extends FragmentStatePagerAdapter 
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs) 
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    


    @Override
    public Fragment getItem(int position) 

        switch (position) 
            case 0:
              return new FragmentTab();
            case 1:
                return new FragmentTab();
            case 2:
                return new FragmentTab();

            default:
                return null;
        
    

    @Override
    public int getCount() 
        return mNumOfTabs;
    


FragmentTab para cada página en View Pager (o puede crear un fragmento diferente para cada página según sus necesidades).

public class FragmentTab extends Fragment 
RecyclerView mRecyclerView;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
    View view = inflater.inflate(R.layout.fragment_tab, container, false);

    mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    mRecyclerView.setLayoutManager(mLayoutManager);
    RecyclerView.Adapter mAdapter = new AdapterOne();
    mRecyclerView.setAdapter(mAdapter);
    return view;


fragment_tab.xml



    



Usar getChildFragmentManager() en lugar de getSupportFragmentManager()

Sin los registros de errores, es difícil decir dónde y por qué obtiene el NullPointerException.

Lo primero que me llamó la atención es que no vinculó su TabLayout y ViewPager. Utilice el siguiente código después de configurar el adaptador para el ViewPager:

// setUpWithViewPager doesn't work without using a Runnable interface.
// Support library bug, maybe?
tabLayout.post(new Runnable() 
    @Override
    public void run() 
        tabLayout.setupWithViewPager(viewPager);
    
);

No estoy seguro de si este es el problema, pero pruébalo 🙂

Si te ha sido de provecho este artículo, sería de mucha ayuda si lo compartieras con el resto juniors de este modo nos ayudas a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *