#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.