gpt4 book ai didi

java - 一起滚动 ListView

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:56:08 26 4
gpt4 key购买 nike

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

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

编辑:这是我所拥有的屏幕截图,也许它能更好地解释我的目的。左侧(红色)是项目列表,右侧是单独的列表。您可以看到列表如何不完美对齐,因此它不完全是一个网格。我想做的是让它像一个大列表一样,滚动其中一个列表也会滚动另一个列表。

App Screenshot

最佳答案

我创建了一个粗略的类,基本上可以完成我想做的事情。如果第二个列表比第一个列表长或者方向发生变化,它的处理能力还不够智能,但它足以让这个概念深入人心。

设置它:

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

}
}

关于java - 一起滚动 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com