首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ScrollView中滚动ListView的问题

在ScrollView中滚动ListView的问题
EN

Stack Overflow用户
提问于 2010-10-25 03:27:37
回答 6查看 4.3K关注 0票数 6

以下是概念上的场景(不包括线性布局)

代码语言:javascript
复制
ScrollView
  Button
  Checkboxes
  Spinner
  ListView (full-size, non-scrolling)
AdMob advert

即滚动窗格,它在顶部具有过滤UI,然后是结果,但广告必须始终保持可见,并且当向下滚动时,过滤器UI必须滚动离开,为结果留出最大空间。

我意识到ScrollView中的ListView存在问题,尽管对我来说,它在许多方面都工作得很好(我正在调整ListView的长度以防止它崩溃)。因此,屏幕滚动得很好,广告留在底部,看起来也不错。

但我看到的问题是,令人费解的是,当活动打开时,ScrollView会向下滚动一点,因此ListView位于屏幕顶部。我假设这是默认行为,所以我开始尝试强制ScrollView的滚动位置到顶部,但我尝试了各种方法,但没有看到任何效果:

代码语言:javascript
复制
scrollview.scrollTo(0, 1000/-1000);
scrollview.smoothScrollBy(0, 1000/-1000);
scrollview.fullScroll(View.FOCUS_UP);

有没有办法强制ScrollView从顶部的滚动位置开始?

如果不是,我怎么能有一个不从底部滚动的广告,而是一个总是从顶部滚动的过滤器UI呢?使用ListView看起来有点夸张,因为我不需要滚动,但它确实提供了很多好处,所以最好避免从头开始并自己渲染所有内容。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-25 03:35:43

如果不滚动,为什么要使用列表视图?为什么你不能使用线性布局或者更适合这种情况的布局呢?你提到一个过滤器,你可以很容易地滚动你自己的过滤器,特别是因为显然你在你的列表视图中只有几个项目。

票数 0
EN

Stack Overflow用户

发布于 2011-08-24 19:08:11

使用以下方法,尽情享受吧!

代码语言:javascript
复制
    private void setListViewScrollable(final ListView list) {
    list.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            listViewTouchAction = event.getAction();
            if (listViewTouchAction == MotionEvent.ACTION_MOVE)
            {
                list.scrollBy(0, 1);
            }
            return false;
        }
    });
    list.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view,
                int scrollState) {
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            if (listViewTouchAction == MotionEvent.ACTION_MOVE)
            {
                list.scrollBy(0, -1);
            }
        }
    });
}

listViewTouchAction是一个全局整数值。如果您可以替换这行

代码语言:javascript
复制
list.scrollBy(0, 1);

如果你有其他的想法,请与我们分享。

票数 1
EN

Stack Overflow用户

发布于 2010-10-25 11:41:55

使用ListView之外的其他东西,您可以动态生成linearLayouts来显示您想要的数据。你不应该在scrollView中使用列表视图,它不能工作的原因很简单,当你滚动的时候,应该滚动什么,列表视图还是滚动视图。谷歌的几个人已经声明不会这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4010005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档