并行同步两个ListViews Android

我试图让两个并排的ListView在一定程度上像GridView一样行事。 我没有使用GridView的原因是因为没有支持Staggered Look。 无论如何,我到目前为止有以下代码:

< - 旧的,现在不相关的代码 - >

编辑:

我做了@Sam建议并使用以下代码:

lv1.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (touchSource == null) {
                    touchSource = v;
                }

                if (v == touchSource) {
                    lv2.dispatchTouchEvent(event);
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        clickSource = v;
                        touchSource = null;
                    }
                }

                return false;
            }
        });

        lv1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                if (parent == clickSource) {
                               //my own code here

                }
            }
        });

        lv1.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if (view == clickSource) {


                }
                boolean loadMore = /* maybe add a padding */
                firstVisibleItem + visibleItemCount + 10 >= totalItemCount;

                if (loadMore) {
                    //add items, load more
                }
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }
        });

        lv2.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (touchSource == null) {
                    touchSource = v;
                }

                if (v == touchSource) {
                    lv1.dispatchTouchEvent(event);
                    if (event.getAction() == MotionEvent.ACTION_UP) {
                        clickSource = v;
                        touchSource = null;
                    }
                }

                return false;
            }
        });
        lv2.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                if (parent == clickSource) {
                }
            }
        });

        lv2.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if (view == clickSource) {

                }
                boolean loadMore = /* maybe add a padding */
                firstVisibleItem + visibleItemCount + 2 >= totalItemCount;

                if (loadMore) {

                }

            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }
        });

我也在列表中使用标题来创建交错效果,我需要不惜一切代价保持这种交错。 这主要是工作(上面的代码),但它很多时间都不一致。 我已经知道这只是当我有短小的挥手。 我不知道为什么,我找不到一个好的解决方案。 在我看来,上述逻辑应该起作用。

此外,为防万一,我使用UniversalImageLoader加载照片和一个简单的EndlessScroll逻辑来加载更多照片(直接调用adapter.notifyDataSetChanged())。 这东西似乎并不太相关。 即使照片被加载,我仍然可以看到它不同步。

我想清楚一点:如果我做了短暂的滑动操作(有时只是在一般情况下重复滚动),我可以随意同步列表。

任何帮助表示赞赏。 谢谢。

编辑2:

但找到一个好的解决方案。 以下是我发现的解决方案并不完美:

  • 上述解决方案:太不常见
  • Pinterest列表视图:否OnScrollListener / onItemClick区分
  • StaggeredGridView:No onScrollListener
  • Stag项目:没有onItemClick监听器
  • 线性布局方法:否onItemClick监听器
  • 有任何想法吗? 谢谢。


    好吧,所以我最终使用了Linear Layout Method (请参阅问题),并使用setTag获取onItemClickListener的工作方式,并使用CustomScrollView实现无限列表工作。

    基本上,两个linearLayouts水平堆叠,在滚动视图内。 它工作得很好,加载速度更快。

    此外,加载我的图像SmartImageView如果有帮助。

    如果有人想要这些代码,我可能会发布部分代码。


    为什么不在ListViews的onScroll侦听器中滚动列表,而不是在onTouch中侦听。 这就是我在该库中使用的类似ListView的滚动轨迹,它的作用就像一个魅力。 看看这个文件。 https://github.com/JlUgia/list_moving_container/blob/master/src/com/ugia/listmovingcontainer/fragment/BottomListMovingContainerFragment.java

    特别注意81(不要忘记添加全局布局更新侦听器)和89(使用onScroll侦听器)。 这样你也可以忘掉点击黑客。

    UPDATE

    我会按以下方式编码。

    lv1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            updateListPosition(lv2, lv1);
        }
    });
    
    lv1.setOnScrollListener(new AbsListView.OnScrollListener() {
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            updateListPosition(lv2, lv1);
        }
    });
    
    lv2.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            updateListPosition(lv1, lv2);
        }
    });
    
    lv2.setOnScrollListener(new AbsListView.OnScrollListener() {
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            updateListPosition(lv1, lv2);
        }
    });
    
    private void updateListPosition(ListView updatedList, ListView scrolledList){
        updatedList.setScrollY(scrolledList.getScrollY());
    
    }
    

    ** setScrollY已经使您的列表无效。

    **请注意,我没有测试代码。 虽然它应该很简单。

    链接地址: http://www.djcxy.com/p/11837.html

    上一篇: Syncing Two ListViews side by side Android

    下一篇: C# Variable Name To String