如何在listview中使用viewpager?

时间:2014-05-31 07:35:21

标签: android listview android-viewpager

我正在尝试在listview中添加视图寻呼机,但是当我尝试更改视图寻呼机页面时,它正在影响Listview手势,我的意思是listview和寻呼机的姿势正在协同工作

但是我想要,如果我正在翻转viewpgaer的寻呼机列表视图不会滚动,那么这个

我已成功在listview中添加了view pager,但请解决此问题:(。我也尝试添加手势但不成功

谢谢

2 个答案:

答案 0 :(得分:1)

此处可能的解决方案:http://dallasgutauckis.com/2013/04/30/android-putting-a-viewpager-inside-a-listview/

  

将ViewPager放在ListView中的问题是,在ListView开始使用触摸事件而不是委托给子节点以便启用ListView的滚动之前,它只需要少量的垂直(Y)增量。这很好,但问题经常发生在ViewPager已经开始处理页面更改(水平拖动时),导致糟糕的用户体验导致两个视图的分页和滚动不正确。

     

有几种方法可以尝试解决这个问题。

  1. 你完全不能这样做(感谢Dianne和Mark)
  2. 您可以在ListView上设置触摸侦听器并尝试委派 触摸基于您认为需要触摸的视图和 基于这些接触需要采取什么行动。
  3. 您还可以将触摸侦听器与GestureDetector结合使用 使实现不那么麻烦。问题是 在一些ListViews中,我们的布局比复杂一点 单项文本行。如果项目布局具有例如a 按钮,我们需要正确地将触摸事件委托给 按钮。这显然会对实施产生巨大影响 和测试。为了避免上述恶作剧,我 将一个OnPageChangeListener添加到ViewPager并基于 寻呼机的状态,强制从活动中触摸代表。
  4.   

    受挫的例子:

    class MyActivity extends Activity {
        private ViewPager mViewPager;
        private View mTouchTarget;
    
        @Override
        protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.example);
    
            mViewPager = (ViewPager) findViewById(R.id.view_pager);
    
            mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    
                private int mPreviousState = ViewPager.SCROLL_STATE_IDLE;
    
                @Override
                public void onPageSelected(int position) {
                    // NO-OP
                }
    
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    // NO-OP
                }
    
                @Override
                public void onPageScrollStateChanged(int state) {
                    // All of this is to inhibit any scrollable container from consuming our touch events as the user is changing pages
                    if (mPreviousState == ViewPager.SCROLL_STATE_IDLE) {
                        if (state == ViewPager.SCROLL_STATE_DRAGGING) {
                            mTouchTarget = mViewPager;
                        }
                    } else {
                        if (state == ViewPager.SCROLL_STATE_IDLE || state == ViewPager.SCROLL_STATE_SETTLING) {
                            mTouchTarget = null;
                        }
                    }
    
                    mPreviousState = state;
                }
            });
        }
    
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (mTouchTarget != null) {
                boolean wasProcessed = mTouchTarget.onTouchEvent(ev);
    
                if (!wasProcessed) {
                    mTouchTarget = null;
                }
    
                return wasProcessed;
            }
    
            return super.dispatchTouchEvent(ev);
        }
    }
    
      

    现在,我们有一个ViewPager,一旦页面开始更改就会保留对触摸事件的控制,并在分页空闲或安定时释放它。

答案 1 :(得分:0)

我在其他帖子上发布了类似的问题。

它对我来说很完美,看起来很棒。 试试这个链接,这可能对您和其他人有所帮助:

View Pager in listview?

希望此链接能够帮助其他观众.. :)