Проблема с ViewPager: завершить действие при пролистывании последней страницы

#android

#Android

Вопрос:

Я хочу завершить Activity , когда пользователь находится в последнем фрагменте внутри a view Pager и пытается перейти к следующему экрану.

Заранее спасибо.

Комментарии:

1. пожалуйста, укажите код вашего адаптера/

2. Большое спасибо, Рикардо. 🙂

Ответ №1:

Прямого способа нет, но вы можете включить пустую страницу в последний индекс ViewPager. Поэтому, когда пользователь заходит на эту пустую страницу, которая, скорее всего, будет фрагментом, вызовите activity finish .

Комментарии:

1. Привет, Раджен, большое спасибо…. Я сделал это на данный момент, поскольку было очень срочно исправить эту проблему, но нам нужно найти точное решение, подобное упомянутому в приведенном ниже коде.

Ответ №2:

Сначала, когда вы создаете свой ViewPager фрагмент в своей ViewPagerAdapter проверке, является ли он последним фрагментом, как показано ниже, и передаете его в качестве параметра вашему фрагменту.

 final Fragment fragment = new Fragment();
if(position == items.size()-1){
   final Bundle args = new Bundle();
   args.putBoolean("isLast",true);
   fragment.setArguments(args);
}
return fragment;
  

В вашем Fragment onCreate методе получите аргументы и проверьте, является ли это вашим ViewPager последним фрагментом, как показано ниже:

 boolean isLast = false;
final Bundle args = getArguments();
if(args != null){
   isLast = args.getBooleanExtra("isLast",false);
}
  

В onCreateView методе вашего фрагмента, когда вы раздуваете свой метод, если этот фрагмент isLast ( isLast == true ) устанавливает прослушиватель касания для вашего просмотра и обнаруживает событие прокрутки, как показано ниже:

 if(isLast){
final int swipeBuffer = 50;
int oldX = 0;
view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            swtich(event.getType()){
               case MotionEvent.MOTION_DOWN:
                  oldX = event.getX();
                  break;

               case MotionEvent.MOTION_UP:
                  int newX = event.getX();
                  if(oldX - newX >= swipeBuffer){
                     // This means user trying to swipe
                     getActivity().finish();
                  }
                  break;
            }
                return true;
        }
    });
}
  

Я не уверен, что это правильное решение, но я думаю, что это может вам помочь.

Комментарии:

1. Привет, спасибо, что поделились кодом, поскольку сейчас он не работает, но я понял вашу логику, насколько я понимаю, нам нужно немного изменить внутри onTouch listener.