【发布时间】: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);
}
});
}
这个解决方案有一个很大的缺点:
假设如下调用序列:
-
CallingActivity以 Intent[EVENTNR=123]启动ListActivity -
ListActivity收到意图并滚动到正确的位置。 - 用户继续阅读并向下滚动。
-
AnotherActivity从ListActivity启动 - 用户按下返回按钮
- 旧意图(来自 1.)仍然存在,并在
ListActivity的onStart中再次传递。 -
ListActivity再次滚动到相同的位置(与 2 相同。) - 用户从 3. 开始滚动丢失
我认为 Intent 是承载滚动信息的错误解决方案。 Intent 更多的是针对 Activity 的内容,而不是针对它的显示。
是否有其他解决方案可以传递仅应用一次的滚动信息?我错过了什么吗?
【问题讨论】:
-
可以使用广播接收器:stackoverflow.com/questions/2282435/…
标签: android listview android-intent