2014-07-22 213 views
1

我试图将自定义对象从一个活动传递给另一个活动。这种方式的工作原理是我的MainActivity中有一个ListView,当应用第一次启动时它是空的。有一个按钮导致我的RecordActivity。用户填写完数据后,他们按下“完成”按钮,将对象传递回我的MainActivity,并将其放入List。这工作正常,但是当我想添加第二个对象时,它只是替换第一个对象,而不是将其添加到列表中。我假设这是因为我每次拨打startActivity(intent)时都会重新创建我的MainActivity。我需要保存我的MainActivity的状态,并在搜索后找不到解决我的问题的线程。Android保持活动状态

这里是我的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 th在填充ListView

编辑:

我要指出,我希望这个名单是持久的,因此,每一个应用程序打开的列表时已经存在,从最后一次。我不知道这是否影响我的问题,因为我将需要使用SharedPreference来存储我的列表

解决方案

onNewintent方法:

Bundle extras = getIntent().getExtras(); 

应该是:

Bundle extras = intent.getExtras(); 
+0

您是否尝试在该活动的清单中添加'android:launchMode =“singleTop”'? –

+0

您也可以将这些值添加到为应用程序的实况保持活动的应用程序类。 [Here](http://developer.android.com/reference/android/app/Application.html)是文档。 – dsum27

+0

@MysticMagic我没有,我添加到我的MainActivity?在 –

回答

1

在开始您的MainActivity时添加以下行;

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

此外,在MainActiviyonCreate方法不会调用此之后被调用。你必须在onNewIntent方法处理额外。

编辑:

应用程序打开的列表每次都是已经存在距离上一次

您必须存储您的ListView的项目用于此目的的SharedPrefs或SQLLite DB 。

+0

我做了这个改变,我的'ListView'不再被填充 –

+0

正如我上面提到的,你必须处理额外的onNewIntent方法。你是否? – Devrim

+0

我做过了,在我的代码中可能会出现这样的错误,我在原始问题 –

0

除了在RecordActivity中启动MainActivity,您可以拨打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");   
    } 
}