Android 在viewpager上,Setadapter和SetCurrentItem删除pagetransform设置的转换

Android 在viewpager上,Setadapter和SetCurrentItem删除pagetransform设置的转换,android,android-viewpager,Android,Android Viewpager,我在应用程序中使用viewpager动态加载视图并水平滚动它们。我还使用pageTransform缩放下一个和上一个视图。我们从 下一个视图中的每个视图都取决于上一个视图的用户响应。在每个选定的OnPages上,我加载下一个视图 mPagerAdapter.addView(ViewToBeAdded, AddAtPostion); //Empty previous view holder mViewPager.setAdapter(mPagerAdapter); 问题步骤1:

我在应用程序中使用viewpager动态加载视图并水平滚动它们。我还使用pageTransform缩放下一个和上一个视图。我们从

下一个视图中的每个视图都取决于上一个视图的用户响应。在每个选定的OnPages上,我加载下一个视图

    mPagerAdapter.addView(ViewToBeAdded, AddAtPostion); //Empty previous view holder
    mViewPager.setAdapter(mPagerAdapter);
问题步骤1:一旦我设置了一个setAdapter,整个viewpager就会滚动到第一个位置(我不知道为什么会发生这种情况)

问题第二步:为了避开问题1,我打电话

    mViewPager.setCurrentItem(AddAtPostion, false);. 
//如果我调用第二个参数为true,则viewPager将从第一项滚动到当前项

但是,当我调用此函数时,pageTransform设置的转换将被删除(因为get applied only on scroll)并且显示前一个视图保持器而不进行任何转换

问题第3步:为了避免问题2,我在setCurrentItem之后添加了runnable以调用假拖动(从中学习)

这确实解决了我应用转换的问题。但是,在应用转换之前,会看到一个空视图持有者的闪光。我束手无策。我是Android的初学者,不知道如何解决这些问题。如果问题1本身得到解决,我就不必找到解决办法

下面是添加视图并使用空布局对上一个视图进行充气的代码

public int addView(View v, int position) {

    prevPos = currPos;
    currPos = position;

    LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(prevPos != -1)
    {
        views.set(prevPos, ((View) inflater.inflate(R.layout.empty_template, null, false)));
    }

    views.set(currPos, v);



    return position;
}
日志:

06-20 16:50:54.890: D/AndroidRuntime(8810): Shutting down VM
06-20 16:50:54.890: W/dalvikvm(8810): threadid=1: thread exiting with uncaught exception (group=0x40bc51f8)
06-20 16:50:54.914: E/AndroidRuntime(8810): FATAL EXCEPTION: main
06-20 16:50:54.914: E/AndroidRuntime(8810): java.lang.NullPointerException
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.support.v4.view.ViewPager.endFakeDrag(ViewPager.java:2234)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at mpkgname.mactivityname$1.run(mactivityname.java:202)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.handleCallback(Handler.java:605)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Looper.loop(Looper.java:137)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.app.ActivityThread.main(ActivityThread.java:4514)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at dalvik.system.NativeStart.main(Native Method)
06-20 16:51:19.992: D/dalvikvm(8810): Debugger has detached; object registry had 658 entries

您是否在每次页面更改时都被称为setAdapter?这意味着每次向viewpager添加新适配器时,它都会滚动到第一页,并且整个viewpager都会重新加载。
06-20 16:50:54.890: D/AndroidRuntime(8810): Shutting down VM
06-20 16:50:54.890: W/dalvikvm(8810): threadid=1: thread exiting with uncaught exception (group=0x40bc51f8)
06-20 16:50:54.914: E/AndroidRuntime(8810): FATAL EXCEPTION: main
06-20 16:50:54.914: E/AndroidRuntime(8810): java.lang.NullPointerException
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.support.v4.view.ViewPager.endFakeDrag(ViewPager.java:2234)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at mpkgname.mactivityname$1.run(mactivityname.java:202)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.handleCallback(Handler.java:605)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Looper.loop(Looper.java:137)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.app.ActivityThread.main(ActivityThread.java:4514)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at dalvik.system.NativeStart.main(Native Method)
06-20 16:51:19.992: D/dalvikvm(8810): Debugger has detached; object registry had 658 entries