如何在滚动视图中滚动Listview?

时间:2012-04-18 12:00:07

标签: android

我是Android新手,我在滚动视图中使用listview开发应用程序。根据我的要求,我需要用垂直滚动显示一些视图,然后在列表视图下方显示。我想垂直滚动整个视图和列表视图,其中listview必须独立滚动。我已经google搜索解决方案,但发现我们不应该在滚动视图中使用Listview。

我尝试过使用动态线性阵列替换Listview的替代方案,但也无效。

当我触摸ListItem时,我尝试禁用ScrollView的焦点,反之亦然,但我没有得到它。

我尝试了以下代码来禁用滚动视图的焦点。

mScrollView.setFocusableInTouchMode(true);
mScrollView.setFocusable(true);

mScrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

mScrollView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.requestFocusFromTouch();
        return false;
    }
});

请提前帮助我,

3 个答案:

答案 0 :(得分:2)

ListViews不应在scrollview中使用。

您的参考:see this

答案 1 :(得分:0)

不要将ListView嵌套在ScrollView

如果你必须这样做,请尝试下面的代码,它也来自StackOverflow,由一个人回答。

public class Utility {
public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() – 1));
    listView.setLayoutParams(params);
}
}

答案 2 :(得分:0)

正如你从别人那里了解的那样......

ScrollView中的ListView无效。

为了解决问题,

您可以将其他布局部分... views添加到一个xml中,将listview添加到另一个xml中

然后使用listView.setHeaderView(view);将您的视图布局添加为标题。

示例代码:

LinearLayout ll =(LinearLayout)findViewById(R.id.headerlayout); ListView lv =(ListView)findViewById(R.id.listview); lv.addHeaderView(LL);

see this 或者您也可以在互联网上搜索带有标题的Listview示例