Android保留活动状态

Android保留活动状态,android,listview,Android,Listview,我正在尝试将自定义对象从一个活动传递到另一个活动。其工作原理是,在我的main活动中有一个ListView,当应用程序首次启动时,它是空的。有一个按钮指向我的记录活动。用户填写完数据后,按下“完成”按钮,将对象传回myMainActivity,并将其放入列表中。这很好,但是当我想添加第二个对象时,它只是替换第一个对象,而不是将其添加到列表中。我假设这是因为每次调用startActivity(intent)时,我都在重新创建我的main活动。我需要保存我的MainActivity的状态,搜索后我找

我正在尝试将自定义对象从一个活动传递到另一个活动。其工作原理是,在我的
main活动中有一个
ListView
,当应用程序首次启动时,它是空的。有一个按钮指向我的
记录活动
。用户填写完数据后,按下“完成”按钮,将对象传回my
MainActivity
,并将其放入
列表中。这很好,但是当我想添加第二个对象时,它只是替换第一个对象,而不是将其添加到列表中。我假设这是因为每次调用
startActivity(intent)
时,我都在重新创建我的
main活动。我需要保存我的
MainActivity
的状态,搜索后我找不到解决问题的线程

以下是my
RecordActivity
中传递对象的代码:

Intent intent = new Intent(getBaseContext(), MainActivity.class);
intent.putExtra("newRecord", EXTRA_RECORD);
startActivity(intent);
这是我在我的
main活动
中检索的代码:

Bundle extras = getIntent().getExtras();
if(extras != null){
    Record addedRecord = extras.getParcelable("newRecord");
    adapter.add(addedRecord);
}
使用onNewIntent方法:

@Override
public void onNewIntent(Intent intent){
    Bundle extras = getIntent().getExtras();
    if(extras != null){
        Record addedRecord = extras.getParcelable("newRecord");
        recordArrayList.add(addedRecord);
        adapter.add(addedRecord);
    }

}
适配器
是我的
阵列适配器
,用于填充
列表视图

编辑:

我需要注意的是,我希望这个列表是持久的,这样每次应用程序打开时,列表就已经存在了。我不知道这是否会影响我的问题,因为我需要使用
SharedReference
来存储我的列表

解决方案

onNewintent
方法中:

Bundle extras = getIntent().getExtras();
应该是:

Bundle extras = intent.getExtras();

在启动
main活动时添加以下行

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
另外,调用此函数后,将不会调用
mainActivity
中的
onCreate
方法。您必须通过
onNewIntent
方法处理额外事务

编辑:

每次应用程序打开时,列表已经从上次开始存在


为此,必须将ListView中的项存储在SharedPrefs或SQLLite DB中

您可以调用
finish()
返回主活动,而不是在
RecordActivity
中启动
main活动。
启动
记录活动时
启动它:

Intent i = new Intent(this, RecordActivity.class);
startActivityForResult(i, EXTRA_RECORD_RESULT);
但在调用
finish()
之前,您需要将数据发送回,您可以通过以下方式实现此目的:

Intent resultIntent = new Intent();
resultIntent.putExtra("key", "value");
setResult(Activity.RESULT_OK, resultIntent);
finish();
在您的主要活动中,会调用此方法:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == EXTRA_RECORD_RESULT)
    {
        value = data.getStringExtra("key");         
    }
}

您是否尝试在该活动的清单中添加
android:launchMode=“singleTop”
?您还可以将这些值添加到应用程序类中,该应用程序类在应用程序运行期间保持活动状态。是我没有的魔法,我要把它添加到我的主要活动中吗?我从未在活动之前使用过launchMode属性,如果该活动已启动,则要为其保留状态。我已经用参考资料解释了它是如何工作的。看见that@MysticMagic我添加了这个,现在我的对象根本没有被添加。我的RecordActivity当前是我的MainActivity的子活动,我需要更改吗?我做了更改,并且我的
ListView
不再在我上面提到的所有位置填充。您必须处理额外的OnEvent方法。是吗?是的,我的代码中可能有错误,我在原始问题中进行了编辑。我认为它会自动调用,如果不是这样,我会在onCreate方法中这样做吗?现在我有一条日志消息,我正在用onNewIntent方法调试,以检查列表的大小。我从编辑中排除了日志语句。那条消息确实会被打印出来