ViewFlipper 中的 listView - 滚动问题

Posted

技术标签:

【中文标题】ViewFlipper 中的 listView - 滚动问题【英文标题】:listView inside a ViewFlipper - scrolling problems 【发布时间】:2011-06-29 18:13:18 【问题描述】:

我在viewFlipper 中的litView 遇到了一些问题。

    // GestureDetector
class MyGestureDetector extends SimpleOnGestureListener 
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
        try 
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false;
            // Right to left swipe
            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
                IconManager.INSTANCE.leftSwipe();
                vf.setInAnimation(slideLeftIn);
                vf.setOutAnimation(slideLeftOut);
                vf.showNext();
                System.out.println("SWIIINGG!!");
                // Left to right swipe
              else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
                IconManager.INSTANCE.rightSwipe();
                vf.setInAnimation(slideRightIn);
                vf.setOutAnimation(slideRightOut);
                vf.showPrevious();
            
         catch (Exception e) 
            // nothing
        
        return false;
    
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) 
        Log.e("Item Click","Item Click");

        Intent intentAgenda = new Intent (Activity_Main.this, AgendaSelected.class);
        //intentAgenda.putExtra("LECTURE_NAME", homeAgendaListAdapter.getItemId(3));
        startActivity(intentAgenda);
        return super.onSingleTapConfirmed(e);
    

此代码使我能够在翻转器中的视图之间翻转并在不同翻转内的列表中滚动。但是,这使我的整个应用可点击。即使我在空白表面上singleTap,它也会记录一次点击,并将我发送到Intent intentAgenda = new Intent 想要发送给我的位置。只有当我点击 listView 中的项目时才会发生这种情况!

我该怎么做才能让特定列表上的听众只听“在列表上”而不是整个应用程序?我相信问题出在public boolean onSingleTapConfirmed,但我看不到。

【问题讨论】:

【参考方案1】:

我没有尝试上述方法,但一种实际可行的解决方案是在列表中创建一个新的 OnItemClickListener,然后 setOnItemClickListener(您的项目单击侦听器)。 那就是在您的情况下不使用单击,而只是像这样创建一个新的 on itemclick 侦听器,但更时尚:

    list.setOnItemClickListener(new OnItemClickListener() 

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) 
            Intent intentAgenda = new Intent (Activity_Main.this, AgendaSelected.class);
            //      //          intentAgenda.putExtra("LECTURE_NAME", homeAgendaListAdapter.getItemId(3));
            startActivity(intentAgenda);
        
    );

如果您想创建更多列表,您可以创建一个新的项目点击侦听器并将每个列表指向它。

【讨论】:

谢谢你!不是那么有效的编码,但到底是什么......它有效! :D 我猜是因为在这种情况下,代码要求您为每个列表创建一个新的 OnItemClickListener。如果您在一项活动中有许多列表,那么这可能不是您应该编码的方式。这只是一个简单的例子。虽然我还没有尝试过,并且已经提出了一段时间,但我猜你应该实现 OnItemClickListener 并为应该有一个 clickListener 的列表创建一个案例。这样,您只需创建一个 OnItemClickListener 实例。【参考方案2】:

由于包含列表的 ViewFlipper 具有相同的手势侦听器,因此在 viewflipper 中被点击的所有内容都将触发 onSingleTapConfirmed() 方法。尝试在单独的手势列表中注册列表以仅处理点击 :) 感觉像问题不在此代码块中,而是在设置gestureListners等的位置。

【讨论】:

以上是关于ViewFlipper 中的 listView - 滚动问题的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在 ViewFlipper 中的多个视图之间切换

Remoteview showNext() 和 showPrevious() 中的 ViewFlipper 不起作用

当我将视图留给前一个孩子时,viewflipper 中的视频视图仍在播放

ViewFlipper:在视图上绘制画布

使用 ViewFlipper 动态调整布局大小

了解ViewFlipper工作机制