2014-07-22 256 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");   
    } 
}