小编lev*_*gli的帖子

ViewPager.setCurrentItem 仅适用于 smoothScroll 设置为 true

我创建了一个无限扩展FragmentPagerAdapter(在这个站点上有关于如何实现这一点的示例)。这允许我迭代 50 个(任意数量)52 个片段(每周一个)的集合,从而为用户提供无限的片段感觉。

通过调用在片段之间滚动/跳转时ViewPager.setCurrentItem,我看到了两种情况:

  1. 无论哪种方式都只跳一个片段 - 一切正常。这大概是由于专门用于此用例的代码ViewPager.setCurrentItemInternal(查找以单词开头的注释We are doing a jump by more than one page
  2. 跳过一个以上的片段,只有setCurrentItemsmoothScroll设置为true(ie setCurrentItem(i, true))时调用,新的片段才会正确显示在屏幕上;否则会出现空白屏幕

据我所知,这可能是因为其中ViewPager.scrollToItem包含以下代码:

if (smoothScroll) {
    smoothScrollTo(destX, 0, velocity);
    if (dispatchSelected) {
        dispatchOnPageSelected(item);
    }
} else {
    if (dispatchSelected) {
        dispatchOnPageSelected(item);
    }
    completeScroll(false);
    scrollTo(destX, 0);
    pageScrolled(destX);
}
Run Code Online (Sandbox Code Playgroud)

这是我超出我的深度的地方。为什么这if/else会导致我正在经历的现象?

android infinite-scroll android-fragments android-viewpager

6
推荐指数
1
解决办法
1668
查看次数

C++静态模板函数导致armcc编译错误(304)

我已经在VS10和armcc4.1 [Build 561]上测试了以下代码的编译.函数depth1()和depth2()都在VS上编译,但是armcc只会编译depth1(),同时为depth2()提供错误304(没有匹配参数列表的实例).当foo和bar是非静态的时,它也会在armcc上编译得很好.

我很乐意明白为什么.

template <class T>
static T foo(T arg)
{
   return arg*5;
}

template <class T>
static T bar(T arg)
{
   return foo<T>(arg);
}

void depth2()
{
   int i = 12;
   i = bar<int>(i);
}

void depth1()
{
   int i = 12;
   i = foo<int>(i);
}
Run Code Online (Sandbox Code Playgroud)

c++ templates compiler-errors

5
推荐指数
1
解决办法
355
查看次数

Android MotionEvent.getHistoricalX为什么会出现异常

我正在使用a GestureDetector.OnGestureListener来实现Android中的双指缩放.我正在扩展一个TextView类,因此该方法setTextSize()已经实现.以下是我的代码onScroll().

 @Override
 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
     if(LOGGING) Log.v(MODULE_NAME, "onScroll()");

     float x, y;
     float oldDist, newDist;

     if (e2.getPointerCount() == 2 && 
         ((e2.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE)) {
         x = e2.getHistoricalX(0, 0) - e2.getHistoricalX(1, 0);
         y = e2.getHistoricalY(0, 0) - e2.getHistoricalY(1, 0);
         oldDist = FloatMath.sqrt(x * x + y * y);
         if (oldDist > 10) {
             if (LOGGING) Log.d(MODULE_NAME, "Starting ZOOM mode");                    
             x = e2.getX(0) - e2.getX(1); …
Run Code Online (Sandbox Code Playgroud)

android exception motionevent

2
推荐指数
1
解决办法
2217
查看次数