对于我的应用程序的一部分,用户会看到一个名字列表,并被要求按照他们认为合适的方式对它们进行分组。
(请注意,ListView代码是从Android Views教程中逐字复制过来的。我还没有根据我的需要定制它,我只是想弄清楚如何让它工作。)
基本布局是一个LinearLayout,其中包含一个ScrollView (在下面的代码中称为"groupsScrollView“),其中包含一个RelativeLayout。我有一些按钮和文本,然后是下面的ListView,它显示姓名列表。所有这些都比可见屏幕区域高,因此允许用户垂直滚动来查看所有内容。
这一切都很好用,除了当页面加载时,它总是预先滚动到我的ListView的顶部-在页面的中间。我创建的告诉用户要做什么的文本和按钮是不可见的。
我可以抓取屏幕并向上滚动,这很好用,但我希望屏幕加载已经滚动到顶部。用户不应该必须向上滚动才能看到新加载页面的顶部。但是,我试图以编程方式滚动到屏幕顶部的所有操作都失败了。
下面是我的onCreate方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.groups);
mainScrollView = (ScrollView)findViewById(R.id.groupsScrollView);
//get the Bundle out of the Intent...
Bundle extras = getIntent().getExtras();
mNames = extras.getStringArray("mNames");
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, mNames));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
//This is the line I'm having issues with
mainScrollView.pageScroll(View.FOCUS_UP);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}
"mainScrollView.pageScroll(View.FOCUS_UP);“这行代码就是问题所在。它不会导致错误,但似乎什么也做不了。我已经尝试了scrollTo(0,0)、scrollDirection(View.FOCUS_UP)和我能想到的所有其他方法。
因为我没有得到一个错误,所以我必须假设这些滚动命令确实在工作,但是它们是滚动到ListView的顶部,而不是包含它的ScrollView或RelativeLayout的顶部。谷歌自己对scrollTo(int,int y)方法的描述似乎证实了这一点,他们说“这个版本还将滚动限制在我们孩子的边界上”。
因此,让一个长问题变得更长,我如何在包含在ScrollView中的屏幕上加载一组视图,然后以编程方式将整个视图滚动到页面顶部,以便用户可以与其交互?
谢谢!
发布于 2011-01-23 21:15:46
试一试
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
应该能行得通。
发布于 2012-05-20 04:10:00
也有同样的问题,可能是某种bug。
即使是来自另一个答案的fullScroll(ScrollView.FOCUS_UP)
也不起作用。
唯一对我起作用的是在对话框显示后立即调用scroll_view.smoothScrollTo(0,0)
。
发布于 2014-07-12 02:12:16
我也有同样的问题,这解决了它。希望能对你有所帮助。
listView.setFocusable(false);
https://stackoverflow.com/questions/4119441
复制相似问题