Created
September 16, 2019 17:11
Star
You must be signed in to star a gist
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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