我正在尝试将自定义对象从一个活动传递到另一个活动。这样做的方式是我的ListView
中MainActivity
在应用首次启动时为空。有一个指向我RecordActivity
的按钮。在用户填写数据后,他们按下“完成”按钮,将对象传回我的MainActivity
并将其放入List
。这工作正常,但是当我想添加第二个对象时,它只是替换第一个对象,而不是仅将其添加到列表中。我假设这是因为我每次拨打MainActivity
时都会重新创建startActivity(intent)
。我需要保存MainActivity
的状态,搜索后我找不到解决问题的线程。
以下是我RecordActivity
传递对象的代码:
Intent intent = new Intent(getBaseContext(), MainActivity.class);
intent.putExtra("newRecord", EXTRA_RECORD);
startActivity(intent);
以下是我的MainActivity
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);
}
}
adapter
是填充ArrayAdapter
ListView
修改
我应该注意,我希望这个列表是持久的,以便每次应用程序打开时,列表都是从上次开始的。我不知道这是否会影响我的问题,因为我需要使用SharedPreference
来存储我的列表
解决方案
在onNewintent
方法中:
Bundle extras = getIntent().getExtras();
应该是:
Bundle extras = intent.getExtras();
答案 0 :(得分:1)
在开始MainActivity
;
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
调用此方法后,onCreate
处的MainActiviy
方法也不会被调用。您必须使用onNewIntent
方法处理额外内容。
修改:
每次应用打开时,列表都是从上次开始的
为了达到此目的,您必须在SharedPrefs或SQLLite DB中存储ListView的项目。
答案 1 :(得分:0)
您可以致电MainActivity
返回主要活动,而不是在RecordActivity
中启动finish()
。
启动RecordActivity
时启动它:
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");
}
}