В viewpager, Setadapter и SetCurrentItem удаляются преобразования, заданные pagetransform

Я использую viewpager в своем приложении для динамической загрузки просмотров и прокрутки их по горизонтали. Я также использовал pageTransform для масштабирования следующего и предыдущего просмотров. Приняли код из

http://developer.android.com/training/animation/screen-slide.html

Каждое из следующего вида зависит от ответов пользователя предыдущего представления. На каждом OnPageSelected я загружаю следующий вид

mPagerAdapter.addView(ViewToBeAdded, AddAtPostion); //Empty previous view holder mViewPager.setAdapter(mPagerAdapter); 

Проблема Шаг 1: Когда я делаю setAdapter, весь viewpager прокручивается до первой позиции (я не уверен, почему это происходит).

Проблема Шаг 2: Чтобы обойти проблему 1, я позвонил

  mViewPager.setCurrentItem(AddAtPostion, false);. 

// Если я вызываю со вторым параметром как true, viewPager прокручивается от первого элемента к текущему элементу.

Тем не менее, когда я это называю, преобразования, заданные с помощью pageTransform, удаляются (поскольку получатель применяется только при прокрутке), а предыдущий держатель вида отображается без какого-либо преобразования.

Проблема Шаг 3: Чтобы обойти проблему 2, я добавил runnable для вызова поддельного перетаскивания после setCurrentItem (как выяснено, как можно скорее применить PageTransformer к PagerView )

 private Handler mhandler = new Handler(); private Runnable mrunnable = new Runnable() { public void run() { mViewPager.beginFakeDrag(); mViewPager.fakeDragBy(0f); mViewPager.endFakeDrag(); } }; //Called as mhandler.postDelayed(mrunnable, 10); after setCurrentItem. 

Это решает мою проблему применения трансформации. Однако есть вспышка пустого держателя вида, видимого до применения преобразования. Я нахожусь на своем пути. Я новичок в 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; } 

Logcat:

 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