ScrollView中的ViewPager里面的ListView

时间:2014-05-02 13:18:44

标签: android listview android-viewpager scrollview

我目前正在开发基于iOS版本的Android应用,我必须为主菜单实现以下布局:

带有几个按钮的顶级集线器,然后是一个ViewPager。这个ViewPager在它上面有一个条(在它自己和中心之间)以显示页面'标题。 ViewPager内部是一个用于显示文章的ListView。

预期的滚动行为如下:当您从最顶部向下滚动时,它应该正常滚动并隐藏集线器,然后当您滚动到标题栏到达顶部的位置时它应该捕捉标题栏在适当的位置,您仍然可以滚动ListView。

我不知道如何将集线器添加到所有这些并具有所需的行为。没有集线器,一切都已经实现并正常运行。但我不知道如何添加它并使其工作。

我尝试将所有内容放在ScrollView中,但这似乎不起作用。滚动仍然适用于文章的ListView,但它不会滚动轮毂。

根据大多数人的说法,你永远不应该在另一个内部有一个滚动元素。但我没有看到任何其他方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

我在滚动视图中有多个列表视图并使其工作我使用以下方法设置每个列表视图的高度。以前的事情很好。

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(),
            MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        view = listAdapter.getView(i, view, listView);
        if (i == 0)
            view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,
                    LayoutParams.WRAP_CONTENT));

        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += view.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}

答案 1 :(得分:0)

我已经实现了这个组件作为ListView,所以你不需要调整你的外部代码,它解决了Scrollview中的ListView与其他元素一起的问题......我把它命名为StretchedListView,没有外部黑客需要。这是对另一篇文章的回答:https://stackoverflow.com/a/21878703

享受!