对于我的应用程序的一部分,用户会看到一个名称列表,并被要求按照他们认为合适的方式对它们进行分组。
(注意,ListView 代码是从 Android 视图教程中一字不差地复制过来的。我还没有根据自己的需要定制它,我只是想弄清楚如何让它工作。)
基本布局是 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)、 scrollDirectionView.FOCUS _ UP 和其他我能想到的所有方法。
因为我没有得到一个错误,我必须假设这些滚动命令实际上是工作的,但是他们滚动到 ListView 的顶部,而不是包含它的 ScrollView 或 RelativeLayout 的顶部。Google 自己对 scrollTo (int x,int y)方法的描述似乎证实了这一点,他们说: “这个版本也将滚动限制在我们孩子的边界内。”.
所以,为了让这个问题更长一些,我该如何在 ScrollView 中加载屏幕上的一系列视图,然后通过编程将整个视图滚动到页面的顶部,以便用户可以与之交互?
谢谢!