2013-06-13 54 views
2

我有一個Activity1,它啓動了Activity2Activity2有一個列表,顯示了數據庫中的一些值。活動第二次啓動時的奇怪行爲

Activity2啓動首次列表中顯示了正確的信息,但如果我按後退按鈕,然後啓動Activity2再次它正確加載從數據庫中的信息,但它沒有顯示在清單中。

啓動代碼Activity2Activity1

final Intent int2 = new Intent(getActivity(), CombinationsManagerActivity.class); 
MyActivity.insertSomeExtraInfoToTheIntent(int2, currentEmployee.id); 
getActivity().startActivity(int2); 

而且Activity2列表的代碼是這樣(我叫它當活動是與服務器(的onResume後)寄存器):

private void fillList() { 

     list = (ListView) findViewById(R.id.list_combinations); 
     ZKEmployeeLoginCombination combinations = ZKEmployeeLoginCombination.selectLoginCombinationsByEntityID(this, idEmployee); 
     LoginCombinationsListAdapter adapter = new LoginCombinationsListAdapter(this, combinations, enrolledTypes); 
     list.setAdapter(adapter); 

    } 

另外,Activity2清單聲明:

<activity 
      android:name="com.blabla.android.app.employeemanagementv3.CombinationsManagerActivity" 
      android:label="@string/combinations_manager" > 
     </activity> 

任何幫助,將不勝感激。

+0

我不知道真的爲什麼發生這種情況,但對於給一個嘗試,如果你是調用完成(),當你在第二個活動按後退按鈕?你試過這個嗎? – Opiatefuchs

+0

你在哪裏調用了這個方法fillList()。 – Sam

+0

另一種可能性是Activity2每次都在同一個任務中打開。建議在您的清單中添加'android:launchMode =「singleTop」' – verybadalloc

回答

1

最後,我發現了我的代碼上的錯誤:對於項目需求,我們保留一些結構作爲服務器事件的偵聽器。而registration就是其中之一。

登記從活動的聽衆的方法是:

private static IncomingEventHandler eventHandler = new IncomingEventHandler(); 
... 
if(eventHandler.get(this.name) == null){ 
eventHandler.add(this.name, this); 
} 

所以我保持從以前的活動的引用,然後,當活動收到registration情況下,我們在後期在做:

referenceToActivity.doSomeStuffOnUIThreadAfterRegister(); 

這行之有效的第一次,但在第二個執行referenceToActivity分別指向第一個活動

0

你可能只想在那裏有一個Activity2在應用程序中存活。如果是這樣,我建議您在活動2的清單中包含以下內容:

android:launchMode="singleTask" 

這可以解決您的問題。有關說明,請參見the android documentation

+0

謝謝,我試過了(也是singleTop),但結果是一樣的。 –

+0

在這種情況下,我不確定。我建議你通過加入'Log.d(...)'來確定執行路徑,以確定第二個activity2對象是否與第一次是同一個對象,查找正在創建和銷燬的活動檢查一切正常,等等等等。祝你好運! – Stochastically

0

剛通過把這個代碼片斷上的活性2類

@Override 
    public void onBackPressed() { 
     Intent startNewActivityOpen = new Intent(Activity2.this, Activity1.class); 
     startActivity(startNewActivityOpen); 

    }