对于我的应用程序的一部分,系统会向用户显示一个名称列表,并要求他们将其分组为合适的名称。
(请注意,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 x,int y)”方法的描述似乎证实了这一点,他们说“此版本还将滚动限制在我们孩子的范围之内。”。
因此,要提出一个更长的问题,我如何在ScrollView中包含的屏幕上加载一堆视图,然后以编程方式将整个视图滚动到页面顶部,以便用户可以与之交互?
谢谢!