【问题标题】:List views do not scroll smoothly列表视图滚动不顺畅
【发布时间】:2012-07-27 05:23:09
【问题描述】:

我有两个列表视图。我需要自动滚动一个列表视图 当滚动另一个列表视图时。两个列表视图都应该有这个能力

我在两个列表视图中都实现了 onScrollListner

对于列表视图 1

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
if (l1.getChildAt(0) != null) {
    Rect r = new Rect();
    l1.getChildVisibleRect(l1.getChildAt(0), r, null);
    l2.setSelectionFromTop(l1.getFirstVisiblePosition(), r.top);
    }

}

对于列表视图 2

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
if (l2.getChildAt(0) != null) {
    Rect r = new Rect();
    l2.getChildVisibleRect(l2.getChildAt(0), r, null);
    l1.setSelectionFromTop(l2.getFirstVisiblePosition(), r.top);
    }

}

我对此有 2 个问题

1 - 列表滚动不顺畅。 (不像普通的列表视图)

2 - 我只能使用一个列表视图滚动两个列表视图。(当我使用 l2 滚动时 两者都滚动。但是当我使用 l1 滚动时它不起作用。两者都保持固定)

提前致谢

【问题讨论】:

    标签: android


    【解决方案1】:

    这是因为您将 listview 放在 listview 中 :)

    你可以用这个来解决你的问题。

    假设 L1 在 L2 内,那么

    L1.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View arg0, MotionEvent arg1) {
    
                    if(arg1.getAction() == MotionEvent.ACTION_DOWN || arg1.getAction() == MotionEvent.ACTION_MOVE)
                    {
                    L2.requestDisallowInterceptTouchEvent(true);
    
                    }
                    return false;
                }
            });
    

    【讨论】:

      【解决方案2】:

      这是您的应用程序,因此您可以为所欲为,但我对您想要实现的目标感到困惑。拥有两个列表视图的唯一想法是分别表示两种不同类别的数据,以便可以分别访问(滚动或选择)它们。
      如果您需要表示需要并排显示为列表的两类数据,那么您可以有一个包含两列的列表行。
      像这样的东西会起作用:


      您可以使用不同类型的数据填充这两行,并且可以一起滚动。

      【讨论】:

      • 你的回答让我有了不同的想法。我使用网格视图解决了我的问题。谢谢
      • 网格视图是更好的选择。使用网格视图处理点击不同的列项目会更容易。 :)
      【解决方案3】:

      我发现了一种不同的方法来获得相同的结果。我删除了我的两个列表视图并替换了它 带有两列的网格视图。这样我可以在不实现 onScrollListner 的情况下滚动两者,我什至可以使用我用于两个列表视图的自定义适配器。

      【讨论】: