Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created September 16, 2019 17:11
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save parzibyte/29435f09f600018d34d1751b7fde53e6 to your computer and use it in GitHub Desktop.
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class FragmentAvios extends Fragment {
private TabLayout tabLayout;
private ViewPager viewPager;
AdaptadorViewPager adaptadorViewPager;
public FragmentAvios() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_fragment_avios, container, false);
}
private void agregarIconoAUltimoTab() {
TabLayout.Tab tab = tabLayout.getTabAt(viewPager.getAdapter().getCount() - 1);
if (tab != null) {
tab.setIcon(R.drawable.ic_add_white_24dp);
}
}
private void agregarTab(){
// el título del tab
String titulo = String.valueOf(viewPager.getAdapter().getCount() + 1);
adaptadorViewPager.agregarFragmento(new FragmentFormularioDeAvio(), titulo);
adaptadorViewPager.notifyDataSetChanged();
agregarIconoAUltimoTab();
// Enfocar la penúltima 100 milisegundos después
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Seleccionar la penúltima pestaña
tabLayout.setScrollPosition(viewPager.getAdapter().getCount() - 2, 0, true);
viewPager.setCurrentItem(viewPager.getAdapter().getCount() - 2);
}
}, 100);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
viewPager = view.findViewById(R.id.viewPagerAvios);
tabLayout = view.findViewById(R.id.tabLayoutAvios);
adaptadorViewPager = new AdaptadorViewPager(getActivity().getSupportFragmentManager());
tabLayout.setupWithViewPager(viewPager);
agregarTabsIniciales(viewPager);
agregarIconoAUltimoTab();
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == viewPager.getAdapter().getCount() - 1) {
agregarTab();
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void agregarTabsIniciales(ViewPager viewPager) {
adaptadorViewPager = new AdaptadorViewPager(getActivity().getSupportFragmentManager());
for (int x = 1; x < 3; x++) {
adaptadorViewPager.agregarFragmento(new FragmentFormularioDeAvio(), String.valueOf(x));
}
viewPager.setAdapter(adaptadorViewPager);
}
class AdaptadorViewPager extends FragmentPagerAdapter {
private final List<Fragment> listaDeFragmentos = new ArrayList<>();
private final List<String> listaDeTitulosDeFragmentos = new ArrayList<>();
AdaptadorViewPager(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return listaDeFragmentos.get(position);
}
@Override
public int getCount() {
return listaDeFragmentos.size();
}
void agregarFragmento(Fragment fragment, String title) {
listaDeFragmentos.add(fragment);
listaDeTitulosDeFragmentos.add(title);
}
// Si es el título de la última pestaña, regresamos null, lo
// cual regresará el icono únicamente
@Override
public CharSequence getPageTitle(int position) {
if (position >= getCount() - 1) return null;
return listaDeTitulosDeFragmentos.get(position);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment