我无法弄清楚如何在视图寻呼机的最后一页捕捉滑动事件。
基本上要求是当用户在最后一页上,并且他们尝试滑动以进入下一页时,活动应该关闭。
我已尝试在PageScrolled上执行此操作,但我似乎无法在此处区分左或右滑动。在最后一页上,用户仍应保留移至上一页的功能。
所以基本上就是
When on last page
if swipe prev (do normal behaviour)
if swipe next (finish activity)
任何人都可以提供任何建议吗? 感谢
答案 0 :(得分:14)
这是工作解决方案!!
必填变量
add or addAll
ViewPager的 onPageScrolled
remove, removeAll, retainAll, and clear operations.
答案 1 :(得分:10)
你应该在你的ViewPager
中添加一个虚假的空白页面,当用户滑动你的实际最后一页时,它会出现在这个假页面上。当这个假的可见时完成Activity
。
你应该尝试这种方式,如果它不起作用,我可以给你一个示例代码。
答案 2 :(得分:8)
我可能已经很晚了,但这可能有助于其他人下线。我从stackoverflow上的一个问题得到了片段,我只是稍微调整了一下代码。
来自here的答案。
ViewPager.OnPageChangeListener pagerListener = new ViewPager.OnPageChangeListener() {
boolean lastPageChange = false;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){
int lastIdx = mPgScreenAdapter.getCount() - 1;
Log.d(TAG, "pos:" + position);
if(lastPageChange && position == lastIdx) {}
}
@Override
public void onPageSelected( int i) {
pgText.setCurrentItem(i/2);
}
@Override
public void onPageScrollStateChanged(int state) {
int lastIdx = mPgScreenAdapter.getCount() - 1;
int curItem = pgScreen.getCurrentItem();
if(curItem==lastIdx && state==1){
lastPageChange = true;
// i put this here since onPageScroll gets called a couple of times.
finish();
}else {
lastPageChange = false;
}
}
};
答案 3 :(得分:0)
希望你得到答案,我遇到了同样的问题,这就是我所做的:
如果您正在使用viewpager和扩展名为FragmentStatePagerAdapter
的类的活动,则可以使用getItem(int position)
方法检查是否到达了最后一页。如果您声明了NUM_PAGES
,也可以使用它来检测用户是否已到达最后一页。
答案 4 :(得分:0)
我也试着找到解决方案。这是工作代码。希望它能帮助别人: -
private function validatePossibleConbinations($combinations)
{
$error = true;
foreach($combinations as $set_id => $comb)
{
$nextArray = ++$set_id;
foreach($comb as $key => $selections)
{
if(isset($combinations[$nextArray])){
foreach($combinations[$nextArray] as $nextComb){
if($comb[$key] === $nextComb){
$error = false;
}
}
}
}
}
return $error;
}
我使用counter作为全局变量。
谢谢!
答案 5 :(得分:0)
我根据此处的解决方案创建了一个抽象侦听器。我想在最后一页上向右滑动或在第一页上向左滑动时做一些事情。
import android.support.v4.view.ViewPager;
abstract class PageChangeToUnavailablePageListener implements ViewPager.OnPageChangeListener {
private int finalPageIndex;
private boolean finalPageVisible = false;
private boolean firstPageVisible = true;
private int lastScrollState = 0;
abstract void onUnavailablePageChangeOnLastPage();
abstract void onUnavailablePageChangeOnFirstPage();
public PageChangeToUnavailablePageListener(int finalPageIndex) {
this.finalPageIndex = finalPageIndex;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int i) {
firstPageVisible = (i == 0);
finalPageVisible = (i == finalPageIndex);
}
@Override
public void onPageScrollStateChanged(int state) {
// The normal state sequence for changing pages is
// DRAGGING (user starts drag), SETTLING (next page is chosen), IDLE (animation is complete).
// No next page is chosen when dragging right on last page, or left on first page.
// In this case the SETTLING state is missing and the sequence is (DRAGGING, IDLE).
if (lastScrollState == ViewPager.SCROLL_STATE_DRAGGING && state == ViewPager.SCROLL_STATE_IDLE) {
// The user scrolled to an unavailable page.
if (finalPageVisible) {
onUnavailablePageChangeOnLastPage();
} else if (firstPageVisible) {
onUnavailablePageChangeOnFirstPage();
}
}
lastScrollState = state;
}
}
答案 6 :(得分:0)
活动中:
private static int MAX_LAYOUTS = 3;
private boolean isLastPageSwiped;
private int counterPageScroll;
在onCreate中:
ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == MAX_LAYOUTS - 1 && positionOffset == 0 && !isLastPageSwiped) {
if (counterPageScroll != 0) {
isLastPageSwiped = true;
Intent intent = new Intent(OldActivity.this, NewActivity.class);
startActivity(intent);
}
counterPageScroll++;
} else {
counterPageScroll = 0;
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
};
viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
答案 7 :(得分:0)
charlist
答案 8 :(得分:0)
我也有解决方案(在 kotlin 中),
例如我的 tabview 有 3 页。
......
private var isLastPageSwiped = false
private var indexPageScroll = 0
......
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
if (position == 2 && positionOffset == 0f && !isLastPageSwiped) {
if (indexPageScroll != 0) {
isLastPageSwiped = true
//Next Activity here
//You can perform your action on last page scroll.
}
indexPageScroll++
} else {
indexPageScroll = 0
}
}