Reputation: 502
I have a viewpager where each page, if clicked, starts an activity. Now, it happens that if I click several times on a page before the activity starts, more activities are opened with the same page. how to avoid it? I simply have this method in my viewpager adapter. Write in the comments if you need other code.
ViewPagerAdapter.java
public class ViewPagerAdapter extends PagerAdapter {
public ViewPagerAdapter() {
/*****/
}
@Override
public int getCount() {
return models.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view.equals(o);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.item_viewpager, container, false);
/*****/
container.addView(view, 0);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (position == 0) { //SINGLEPLAYER
Intent newGameActivity = new Intent(context, com.game.project.GameActivity.class);
context.startActivity(newGameActivity);
}else{
Intent newGameActivity = new Intent(context, com.game.project.GameActivity.class);
context.startActivity(profileActivity);
}
});
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
}
Upvotes: 0
Views: 266
Reputation: 1081
Inside your onClick() unregister the listener by:
view.setOnClickListener(null)
This way, once clicked you cannot click again. Remember to register the click listener again onResume() if you come back to the page.
Another way is to disable the view itself after clicking it by calling isEnabled(false) inside your onClick():
view.isEnabled(false)
Upvotes: 3