gpt4 book ai didi

android - 同步ViewPager中的所有ListView

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

在我的应用程序中,我有一个 ViewPager,每个 ViewPager 中都有一个自定义 ListView,它像表中的行一样链接在一起。问题是当我在第一页滚动 ListView 然后滚动 ViewPager 时,第一页的 ListView 和第二页的 ListView 未对齐。 listView 必须对齐,因为在第一个中我有一个带有描述的 TextView,然后是 4 个带有数据的列,而在下一个 ListViews 中有 6 个没有描述的列,所以如果它们未对齐会非常复杂。那么我怎样才能一次滚动所有的 listViews 呢??

编辑:

非常感谢 Rahul Parsani...我终于设法做到了...如果您在单独的 fragment 中有 listView 并且 fragment 的数量未定义,这就是答案:

final ArrayList<ListView> lvs = new ArrayList<ListView>();
for (int j = 0; j < adapter.getCount(); j++) {
YourFragment fragJ = (YourFragment) adapter.getItem(j);
final ListView listViewJ = fragJ.lv;
lvs.add(listViewJ);
}

for (int j = 0; j < lvs.size(); j++) {
final int x = j;
lvs.get(j).setOnTouchListener(new OnTouchListener() {

boolean dispatched = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (!dispatched) {
dispatched = true;
if (x != 0) {
lvs.get(x - 1).dispatchTouchEvent(event);
};
if (x != lvs.size() - 1) {
lvs.get(x + 1).dispatchTouchEvent(event);
}

}
dispatched = false;
return false;
}
});
}

最佳答案

您要做的是同步 ListView 。有一个库已经为两个 ListView 实现了这个 here .我将尝试解释与您相关的源代码部分,该部分位于 Activity here 中。 .

假设您可以通过变量访问所有 ListView :

listViewOne = (ListView) findViewById(R.id.list_view_one);
listViewTwo = (ListView) findViewById(R.id.list_view_two);
listViewThree = (ListView) findViewById(R.id.list_view_three);
listViewFour = (ListView) findViewById(R.id.list_view_four);

在它们上面设置相同的触摸监听器:

listViewOne.setOnTouchListener(touchListener);
listViewTwo.setOnTouchListener(touchListener);
// similarly for listViewThree & listViewFour

触摸监听器的基本思想是将事件分派(dispatch)给其他 View ,以便它们也与被触摸的 ListView 同步滚动。

// Passing the touch event to the opposite list
OnTouchListener touchListener = new OnTouchListener() {
boolean dispatched = false;

@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.equals(listViewOne) && !dispatched) {
dispatched = true;
listViewTwo.dispatchTouchEvent(event);
listViewThree.dispatchTouchEvent(event);
listViewFour.dispatchTouchEvent(event);
} else if (v.equals(listViewTwo) && !dispatched) {
dispatched = true;
listViewOne.dispatchTouchEvent(event);
listViewThree.dispatchTouchEvent(event);
listViewFour.dispatchTouchEvent(event);
} // similarly for listViewThree & listViewFour
dispatched = false;
return false;
}
};

库还设置了一个滚动监听器,我相信使用它是因为 View 可能具有不同的高度,而您没有。尝试让我知道这是否有效。

关于android - 同步ViewPager中的所有ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891828/

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