尽快将PageTransformer应用于PagerView

5
我有一个应用于ViewPager的PageTransfomer,它的工作很好,但我想在将PageTransformer设置给ViewPager后立即启动页面转换。我已经尝试过以下方法:

  • setCurrentItem(int)
  • setCurrentItem(int, true)
  • beginFakeDrag(), fakeDragBy(float), endFakeDrag()
  • invalidate()
  • getAdapter().notifyDataSetChanged()

我已经在我的活动的onCreate方法中尝试了所有这些方法,但可能是我做错了什么。

有人有线索吗?

谢谢

2个回答

5

根据Oleg的答案,我在我的应用程序中使用了下面的代码。

我的添加是检查beginFakeDrag()返回的结果,位于_invalidatePageTransformer内部。

我从内部调用sendInvalidatePageTransformer()

  • onConfigurationChanged() when the orientation changed
  • inside the LoaderCallback<Cursor>-methods in my Fragment

    private Handler handler = new Handler()
    {
            public void handleMessage(Message msg)
            {
                    switch(msg.what)
                    {
                            case 0:
                                    _invalidatePageTransformer();
                                    break;
                    }
            }
    };
    
    private void _invalidatePageTransformer()
    {
            //no need to invalidate if we have no adapter or no items
            if (this.getAdapter() != null && this.getAdapter().getCount() > 0)
            {
                    //import check here, only fakeDrag if "beginFakeDrag()" returns true
                    if (this.beginFakeDrag())
                    {
                            this.fakeDragBy(0f);
                            this.endFakeDrag();
                    }
            }
    }
    
    public void sendInvalidatePageTransformer()
    {
            this.handler.sendEmptyMessage(0);
    }
    

编辑:注意:此代码位于自定义ViewPager子类中


2
尝试以下两种方法之一:
  1. 将代码放在onPostCreate()中。
  2. 将代码放在一个处理程序中,例如:new Handler().post(new Runnable() { /* your code */ });

2
谢谢,它可以使用Handler和beginFakeDrag()、fakeDragBy(0f)、endFakeDrag()函数。 - magiccyril

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接