package me.tatarka.bindingcollectionadapter.sample; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import me.tatarka.bindingcollectionadapter.sample.databinding.ViewpagerViewBinding; /** * Created by evan on 5/31/15. */ public class FragmentViewPagerView extends Fragment { private static final String TAG = "BindingViewPager"; private ViewModel viewModel; private ViewpagerViewBinding binding; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); viewModel = new ViewModel(false); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = ViewpagerViewBinding.inflate(inflater, container, false); binding.setViewModel(viewModel); binding.setListeners(new PagerListeners(viewModel)); binding.executePendingBindings(); PagerAdapter adapter = binding.pager.getAdapter(); binding.tabs.setTabsFromPagerAdapter(adapter); binding.tabs.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(binding.pager)); binding.pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(binding.tabs)); return binding.getRoot(); } private class PagerListeners extends Listeners { public PagerListeners(ViewModel viewModel) { super(viewModel); } @Override public void onAddItem() { super.onAddItem(); updateTabs(); } @Override public void onRemoveItem() { super.onRemoveItem(); updateTabs(); } private void updateTabs() { // We can't use tabs.setTabsFromPagerAdapter() because it will reset the current item to 0. binding.tabs.removeAllTabs(); PagerAdapter adapter = binding.pager.getAdapter(); for (int i = 0; i < adapter.getCount() ; i++) { binding.tabs.addTab( binding.tabs.newTab().setText(adapter.getPageTitle(i)), i == binding.pager.getCurrentItem() ); } } } }