当前位置: 首页 > 面试题库 >

一起滚动ListView

岳良策
2023-03-14
问题内容

我有两个ListView要滚动在一起的对象。它们
并排放置,因此,如果一个滚动一定数量,则另一个滚动相同
数量。我已经找到了一些有关如何执行此操作的示例,但我相信它们
依赖于ListView高度相同的项目(如果我
错了,请纠正我)。我的一个ListView对象中的项目比另一个对象中的项目高
,跨越2-3个项目。

如何将这两个ListView对象“锁定”在一起?

编辑:这是我所拥有的屏幕截图,也许它将更好地解释
我要做什么。左侧(红色)是项目列表,右侧是
单独的列表。您会看到列表如何无法完美对齐,因此它并非
完全是网格。我想做的就是将此行为像一个大列表一样,
在其中一个列表上滚动也会在另一个列表上滚动。


问题答案:

我创建了一个粗糙的类,基本上可以完成我想做的事情。它不是
足够聪明来处理,如果第二个名单是比第一或者更长的
方向变化,但它的好足以让这个概念了。

进行设置:

list1.setOnScrollListener(new SyncedScrollListener(list2));
list2.setOnScrollListener(new SyncedScrollListener(list1));

SyncedScrollListener.java

package com.xorbix.util;

import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;

public class SyncedScrollListener implements OnScrollListener{
    int offset;
    int oldVisibleItem = -1;
    int currentHeight;
    int prevHeight;
    private View mSyncedView;


    public SyncedScrollListener(View syncedView){

        if(syncedView == null){
            throw new IllegalArgumentException("syncedView is null");
        }

        mSyncedView = syncedView;
    }

    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {

        int[] location = new int[2];

        if(visibleItemCount == 0){
            return;
        }

        if(oldVisibleItem != firstVisibleItem){

            if(oldVisibleItem < firstVisibleItem){
                prevHeight = currentHeight;
                currentHeight = view.getChildAt(0).getHeight();

                offset += prevHeight;

            }else{
                currentHeight = view.getChildAt(0).getHeight();

                View prevView;
                if((prevView = view.getChildAt(firstVisibleItem - 1)) != null){
                    prevHeight = prevView.getHeight();
                }else{
                    prevHeight = 0;
                }

                offset -= currentHeight;
            }

            oldVisibleItem = firstVisibleItem;
        }

        view.getLocationOnScreen(location);
        int listContainerPosition = location[1];

        view.getChildAt(0).getLocationOnScreen(location);
        int currentLocation = location[1];

        int blah = listContainerPosition - currentLocation + offset;

        mSyncedView.scrollTo(0, blah);

    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }
}


 类似资料:
  • 问题内容: 我有多个Tkinter列表框,可以使用单个滚动条一起滚动,但是我也希望它们一起滚动,以便在任何列表框上进行鼠标滚轮活动。 这该怎么做? 我当前的代码基于此处讨论的最后一个模式:http : //effbot.org/tkinterbook/listbox.htm 仅使用滚动条时,它可以很好地工作,但是使用鼠标滚轮时,列表框可​​以独立地滚动。 问题答案: 解决问题的方法与将两个小部件连

  • 请看http://codepen.io/anon/pen/zGLZoR 我的“浮动div”跟随页面滚动-它在向下移动滚动条后立即执行此操作。如何仅在达到px(比如200px)滚动高度时启动浮动。因此,当您向下滚动200px时,可以看到浮动div,而不是直接看到。 编辑: 当滚动回到顶部时,div必须返回到原始位置-超过200px标记

  • 问题内容: 我在Rails应用程序中使用Elasticsearch&Typeahead执行自动完成。我从这里得到了主意 https://shellycloud.com/blog/2013/10/adding-search-and-autocomplete-to-a- rails-app-with-elasticsearch 我已经正确配置了elasticsearch自动完成功能,因为当我直接通过浏

  • 自动滚动只有当我手动滚动到底部一次来“让它继续”时才起作用,如果这有任何意义的话。一旦它被滚动到底部,新项的行为与预期的一样,滚动条自动下降,跟踪ListView的内容。不确定这里可能有什么问题,显然滚动条只有在需要时才会出现,不确定这是否与此有关。 你知道吗?

  • 我看了很多问题,但列出的解决方案都没有解决我的问题:Scrollview不会滚动到底部的空白处 ScrollView不会滚动到底部 (Android) ScrollView不会一直滚动到我的线性布局的底部 我有一个具有以下布局的应用程序,其中包含ScrollView中的LinearLayout 基本上,这个布局被用于一个片段。在这个片段中,我用查询网站得到的字符串为tvPowers和tvAbili

  • 我有一个ImageView,下面有一个EditText。我希望在查看ImageView时能够写入EditText。EditText此时不可见。有人知道如何实现吗?我用TextWatcher试了一下,但TextChanged后的滚动不起作用。 xml如下所示: