I have a small application with a BottomNavigationView
, I have added three buttons, with the first button shows a fragment
_home, in this fragment
there is a viewpager
which aims to show a slide of images , a timer TimerTask
has been set for the interval between images.
The problem I have is that when I go to another fragment
and I return the transitions are altered in the time they are shown, it is as if while I am in the other view, they will be waiting and once I return to this fragment
the times begin to run between the images visually without order.
I think that if moving to another view or fragment it would be good to finish this fragment.
I am using fragmentTransaction.addToBackStack(null);
to enable onBackPressed
to return between fragments, and I read about using fragmentManager.popBackStack()
; but it has not worked for me If I have made myself understood I appreciate your help, then I share code:
MainActivity
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Fragment home = new Fragment_home();
final Fragment dash = new Fragment_Dashboard();
final Fragment notif = new Fragment_notifications();
if(savedInstanceState == null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_main, new Fragment_home()).commit();
}
bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
if (item.getItemId() == R.id.home) {
fragmentTransaction.replace(R.id.content_main, home).commit();
} else if (item.getItemId() == R.id.dashboard) {
fragmentTransaction.replace(R.id.content_main, dash).commit();
} else if (item.getItemId() == R.id.notifications) {
fragmentTransaction.replace(R.id.content_main, notif).commit();
}
return true;
}
});
}
}
Fragment_home
public class Fragment_home extends Fragment {
//ViewPager
ViewPager viewPager;
CustomSwipeAadapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_home, container, false);
//ViewPager
viewPager = (ViewPager)v.findViewById(R.id.view_pager);
adapter = new CustomSwipeAadapter(getContext());
viewPager.setAdapter(adapter);
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), 3000, 4000);
return v;
}
public class MyTimerTask extends TimerTask {
@Override
public void run() {
if(getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if(viewPager.getCurrentItem()==0){
viewPager.setCurrentItem(1);
//viewPager.setCurrentItem(1, true);
}else if(viewPager.getCurrentItem()==1){
viewPager.setCurrentItem(2);
//viewPager.setCurrentItem(2, true);
}else if(viewPager.getCurrentItem()==2){
viewPager.setCurrentItem(0);
//viewPager.setCurrentItem(0, true);
}
}
});
}
}
}
}
Full project on GitHub: PROJECT