首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何滚动到long ScrollView layout的顶部?

如何滚动到long ScrollView layout的顶部?
EN

Stack Overflow用户
提问于 2010-11-08 04:04:32
回答 14查看 175.8K关注 0票数 170

对于我的应用程序的一部分,用户会看到一个名字列表,并被要求按照他们认为合适的方式对它们进行分组。

(请注意,ListView代码是从Android Views教程中逐字复制过来的。我还没有根据我的需要定制它,我只是想弄清楚如何让它工作。)

基本布局是一个LinearLayout,其中包含一个ScrollView (在下面的代码中称为"groupsScrollView“),其中包含一个RelativeLayout。我有一些按钮和文本,然后是下面的ListView,它显示姓名列表。所有这些都比可见屏幕区域高,因此允许用户垂直滚动来查看所有内容。

这一切都很好用,除了当页面加载时,它总是预先滚动到我的ListView的顶部-在页面的中间。我创建的告诉用户要做什么的文本和按钮是不可见的。

我可以抓取屏幕并向上滚动,这很好用,但我希望屏幕加载已经滚动到顶部。用户不应该必须向上滚动才能看到新加载页面的顶部。但是,我试图以编程方式滚动到屏幕顶部的所有操作都失败了。

下面是我的onCreate方法:

代码语言:javascript
复制
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中的屏幕上加载一组视图,然后以编程方式将整个视图滚动到页面顶部,以便用户可以与其交互?

谢谢!

EN

回答 14

Stack Overflow用户

发布于 2011-01-23 21:15:46

试一试

代码语言:javascript
复制
mainScrollView.fullScroll(ScrollView.FOCUS_UP);

应该能行得通。

票数 280
EN

Stack Overflow用户

发布于 2012-05-20 04:10:00

也有同样的问题,可能是某种bug。

即使是来自另一个答案的fullScroll(ScrollView.FOCUS_UP)也不起作用。

唯一对我起作用的是在对话框显示后立即调用scroll_view.smoothScrollTo(0,0)

票数 180
EN

Stack Overflow用户

发布于 2014-07-12 02:12:16

我也有同样的问题,这解决了它。希望能对你有所帮助。

代码语言:javascript
复制
listView.setFocusable(false);
票数 100
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4119441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档