【问题标题】:Scroll ListView on Intent在 Intent 上滚动 ListView
【发布时间】:2012-03-21 10:49:59
【问题描述】:

我遇到了一个复杂的问题,涉及 Android 上的 ListView 和一些 Intent:

我有一个ListActivity,其中包含许多项目。从另一个活动,我们称之为CallingActivity,我想启动这个ListActivity 并滚动到特定项目。在ListActivity 中可以启动其他一些 Activity,我们称它们为AnotherActivity

我当前的实现是在 Intent 中存储 ListActivity 应该滑动到的项目,然后在 onStart() 方法中使用以下代码。

if (getIntent().getExtras() != null && getIntent().getExtras().containsKey(EXTRA_EVENTNR)) {
        int p = getIntent().getExtras().getInt(EXTRA_EVENTNR);
        getListView().clearFocus();
        getListView().post(new Runnable() {
            @Override
            public void run() {
                getListView().setSelection(p);
            }
        });
    }

这个解决方案有一个很大的缺点:

假设如下调用序列:

  1. CallingActivity 以 Intent [EVENTNR=123] 启动 ListActivity
  2. ListActivity 收到意图并滚动到正确的位置。
  3. 用户继续阅读并向下滚动。
  4. AnotherActivityListActivity 启动
  5. 用户按下返回按钮
  6. 旧意图(来自 1.)仍然存在,并在 ListActivityonStart 中再次传递。
  7. ListActivity 再次滚动到相同的位置(与 2 相同。)
  8. 用户从 3. 开始滚动丢失

我认为 Intent 是承载滚动信息的错误解决方案。 Intent 更多的是针对 Activity 的内容,而不是针对它的显示。

是否有其他解决方案可以传递仅应用一次的滚动信息?我错过了什么吗?

【问题讨论】:

标签: android listview android-intent


【解决方案1】:

如果您使用getIntent().removeExtra() 删除多余的数据会怎样?

另一方面,将信息放入Intent 可能是一种不必要的复杂性,因为您实际上并不需要 Intent。 它可以是一个普通的 java 对象来存储该信息并使用 API 来设置和重置它吗?

【讨论】:

  • 感谢removeExtra 的提示。不管怎样,你能解释一下API to set and reset是什么意思吗?如何将值从CallingActivity 滚动到`ListActivity?
  • 哦,我只是认为造成麻烦的是Intent,因为它总是在那里。所以我的意思是可能创建一个普通的Java类,比如使用set(int pos)和clear()方法的ScrollInfo,并传递它而不是Intent。与 removeExtra() 相同...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2015-08-23
相关资源
最近更新 更多