这是概念上的场景(不包括linearlayouts)
ScrollView
Button
Checkboxes
Spinner
ListView (full-size, non-scrolling)
AdMob advert
即。滚动窗格,其顶部有过滤UI,后跟结果,但广告必须始终保持可见,向下滚动时,过滤器UI必须滚动,为结果留出最大空间。
我知道ScrollView中的ListView存在问题,但对我而言,它在很多方面都运行良好(我正在修复ListView的长度以阻止它崩溃)。因此屏幕滚动得很好,广告保持在底部,看起来很不错。
但是我看到的问题是,莫名其妙地,当活动打开时,ScrollView向下滚动了一下,因此ListView位于屏幕的顶部。我假设这是一个默认行为,所以我开始尝试强制ScrollView的滚动位置到顶部,但我尝试了各种方法,看不到任何效果:
scrollview.scrollTo(0, 1000/-1000);
scrollview.smoothScrollBy(0, 1000/-1000);
scrollview.fullScroll(View.FOCUS_UP);
有没有办法强制ScrollView从顶部的滚动位置开始?
如果没有,我怎么能有一个不会从底部滚动的广告,而是一个总是滚动到顶部的过滤器UI?使用ListView似乎有些过分,因为我不需要滚动,但它确实提供了很多好处,所以最好避免从头开始并自己渲染所有内容。
答案 0 :(得分:1)
使用以下方法享受!
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);
请与我们分享。
答案 1 :(得分:0)
如果您不滚动,为什么使用列表视图?为什么你不能只使用线性布局或更适合这种情况的东西?你提到了一个过滤器,你可以很容易地推出自己的过滤器,特别是因为你的列表视图中只有一些项目。
答案 2 :(得分:0)
使用ListView之外的其他东西,你可以动态生成linearLayouts来显示你想要的数据。你永远不应该在scrollView中使用listview,当你滚动,滚动的内容,列表视图或滚动视图时,它不会因为一个简单的原因而起作用。谷歌的一些人已表示不会这样做。
答案 3 :(得分:0)
我遇到了ScrollView开始略微向下滚动的问题,解决方案是发布一个runnable,它调用animateTo(0,0)方法让列表滚动到顶部。我发现这只能使用anitmatTo(0,0)scrollTo(0,0)似乎不起作用。
有些事情:
mListView.post(new Runnable(){ public void run() { mListView.animateScrollTo(0,0) });
现在每个人都已经说过你不应该在ScrollView中做整个ListView,但这可能是你解决问题的方法。
答案 4 :(得分:0)
我有:
ScrollView
TextView
Button
TextView
ListView
这项工作对我有好处:
scrollView.smoothScrollBy(0, 0);
没有此视图从listview的位置开始,之后从顶部开始
答案 5 :(得分:-1)
此问题的解决方案是将请求重点放在ScrollView顶部的对象上。例如,您可以使用包裹按钮的表格布局并请求焦点到表格布局(如果您关注按钮,它将更改其颜色)。
// onCreate method
TableLayout tablelayout = (TableLayout) findViewById(R.id.tablelayout);
tablelayout.setFocusableInTouchMode(true);
tablelayout.requestFocus();