Android 按意图滚动列表视图

Android 按意图滚动列表视图,android,listview,android-intent,Android,Listview,Android Intent,我遇到了一个复杂的问题,涉及到Android上的ListView和一些意图: 我有一个列表活动,其中包含许多项。从另一个活动中,我们将其称为CallingActivity,我想启动此ListActivity,并滚动到特定项目。在列表活动中可以启动一些其他活动,让我们调用它们另一个活动 我当前的实现是存储ListActivity在intent中应该调用的项,然后在onStart()方法中使用以下代码 if (getIntent().getExtras() != null && ge

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

我有一个
列表活动
,其中包含许多项。从另一个活动中,我们将其称为
CallingActivity
,我想启动此
ListActivity
,并滚动到特定项目。在
列表活动中
可以启动一些其他活动,让我们调用它们
另一个活动

我当前的实现是存储ListActivity在intent中应该调用的项,然后在
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
    启动
    ListActivity
    ,意图
    [EVENTNR=123]
  • ListActivity
    接收意图并滚动到正确位置
  • 用户继续阅读并向下滚动
  • ListActivity
  • 用户按下后退按钮
  • 旧的意图(来自1.)仍然存在,并在
    ListActivity
    onStart
    中再次传递
  • ListActivity
    再次滚动到相同的位置(与第2部分相同)
  • 从3滚动用户。已丢失
  • 我认为意图是承载滚动信息的错误解决方案。意图更多的是活动的内容,而不是它的显示


    是否有另一种只应用一次的滚动信息传递解决方案?我遗漏了什么吗?

    如果您执行
    getIntent().removeExtra()
    删除额外数据会怎么样

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

    感谢
    removeExtra
    提示。无论如何,您能解释一下设置和重置
    的API是什么意思吗?如何将值从
    CallingActivity
    滚动到'ListActivity'的位置?哦,我只是认为引起问题的是意图,因为它总是存在。所以我只是想创建一个简单的Java类,比如ScrollInfo,使用方法set(int pos)和clear()并传递它,而不是Intent。但与removeExtra()相同…可以使用BroadcastReceivers: