滚动问题与滚动型

问题描述:

内一个ListView这里的情景概念(不含linearlayouts)滚动问题与滚动型

ScrollView 
    Button 
    Checkboxes 
    Spinner 
    ListView (full-size, non-scrolling) 
AdMob advert 

即滚动窗格,其中在顶部的过滤UI,随后的结果,但广告必须始终保持可见,并且向下滚动时,过滤器UI必须滚动,为结果留出最大空间。

我知道有一个滚动型内一个ListView问题,但对我来说这是在许多方面的工作以及(我固定的ListView的长度来阻止它崩溃)。所以屏幕很好地滚动,广告停留在底部,看起来不错。

但我看到的问题是,莫名其妙地,活动开启时,滚动型滚动下来了一点,所以ListView的是在屏幕的顶部。我想这是一个默认行为,所以我开始努力了滚动的滚动位置强制到顶部,但我已经试过各种方法,并没有看到效果:

scrollview.scrollTo(0, 1000/-1000); 
scrollview.smoothScrollBy(0, 1000/-1000); 
scrollview.fullScroll(View.FOCUS_UP); 

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

如果没有,我怎么能有一个广告,不滚动断底,但始终滚动顶掉一个过滤器的用户界面?使用ListView似乎过分,因为我不需要滚动,但它确实提供了很多好处,所以很好避免从头开始并渲染所有内容。

+0

这个问题的任何真正的解决方案? – Tony 2012-01-25 18:59:43

+0

这不是一个很好的做法,但如果您尝试在运行时给列表视图的高度超出其可能。见下面的链接: - http://*.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing/3495908#3495908 – duggu 2013-06-24 11:59:49

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

+0

我填补了ListView从一个适配器,我不能用LinearLayout来做到这一点。 ListView中的项目是动态的,我当然会非常感兴趣的知道什么会更好地替代ListView,所以我解决了滚动问题,但保留了ListView的好处,例如数据绑定和项目重用。用AdapterView替换ListView是否合理? – 2010-10-24 20:04:35

+0

您可以创建一个适配器,但不会将其绑定到列表视图 – Falmarri 2010-10-24 22:02:46

+0

我会将它绑定到什么地方? – 2010-10-25 12:24:13

使用其他的东西是一个ListView,你可以dinamically产生linearLayouts显示你想要的数据。你不应该在scrollView中使用listview,它不起作用的原因很简单,当你滚动时,应该滚动什么,列表视图或滚动视图。谷歌的一些人表示不会这样做。

+0

当然,我知道在滚动控件中使用滚动控件是个坏消息(从UI的角度来看,更不用说实现了),但是在ListView没有滚动条的情况下,这种限制变得不那么有意义。 – 2010-10-25 12:25:02

+0

你如何保证listview不滚动? – Falmarri 2010-10-25 17:32:18

+0

不滚动的事实表明没有太多的数据要显示,这是我认为他应该需要列表视图的主要原因。 – blindstuff 2010-10-25 17:34:45

我已经经历了滚动型的出发略微向下滚动的问题,解决办法是发布可运行其称为animateTo(0,0)方法来获取列表中滚动到顶部。我发现这只使用anitmatTo(0,0)scrollTo(0,0)似乎没有工作。

东西线沿线的:

mListView.post(new Runnable(){ public void run() { mListView.animateScrollTo(0,0) }); 

现在大家都已经说明你不应该做滚动型里面全的ListView,但是这可能是你有问题的修复程序。

+0

几个月后回顾一下,我想要做的事情的答案似乎相当明显 - ListView的头。我永远不会滚动内滚动,但我确实需要一个ListView和其他东西作为一个滚动滚动,并且ListView已经包含了所有内容。如果某些Android类的公共接口太大,很容易错过这些东西。 – 2011-04-19 08:16:22

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

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是一个全局整数值。 如果你可以用一些替代线

list.scrollBy(0, 1); 

否则请与我们分享。

我:

ScrollView 
TextView 
Button 
TextView 
ListView 

这项工作对我好:

scrollView.smoothScrollBy(0, 0);   

没有这种观点从列表视图中的位置开始,之后,它从顶部

的解决方案启动这个问题是请求焦点到ScrollView顶部的一个对象。例如,您可以使用包装按钮的表格布局和请求焦点到表格布局(如果您关注按钮,它将更改其颜色)。

// onCreate method 
TableLayout tablelayout = (TableLayout) findViewById(R.id.tablelayout); 
tablelayout.setFocusableInTouchMode(true); 
tablelayout.requestFocus();