2017-06-15 35 views
0

我正在爲學校製作Android應用程序。重新使用活動,無需重新創建

第一次活動是學生其中包含一個ViewPager由3個片段組成。由於它包含3個片段,因此該活動的加載非常昂貴。

1片段包含遊戲的一個ListView

第二個片段包含卡通

第三片段的Lis​​tView控件包含測試的一個ListView(ListView中只包含測試的名稱)。

現在測試片段的onClick上測試(在列表視圖顯示)的一個新的ShowTest活動是打開時其顯示的完整的測試。

每件事情都很好。

這是在TestFragment代碼開始ShowTest活動

test.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Intent it = new Intent(getActivity(), ShowTest.class); 
      startActivity(it); 
     } 
    }); 

而在ShowTest活動我打電話完成();

public void onBackPressed() { 
    this.finish(); 
} 

onBackpressed時ShowTest()被調用學生活動重新創建(在片段每一件事情重新加載)。我不希望第二次創建此活動。因爲加載很昂貴。

這兩個環節不幫我

Open Info Activity without closing Main Activity

Android - Relaunching an activity without having to re-create it

您的幫助將不勝感激。

謝謝(編輯)

+0

這取決於你如何開始你的活動以及代碼的相關部分在哪裏。例如,如果您完成活動並進入下一個活動,並從該活動回到第一個活動,則會重新創建活動。如果你沒有完成,通常活動停留在後臺。那麼所有的代碼都是很重要的......如果你在onResume()中初始化所有的東西,那麼所有的代碼都會重新執行。您一定要閱讀活動生命週期:https://developer.android.com/guide/components/activities/activity-lifecycle.html – Opiatefuchs

+1

沒有辦法保證這一點。如果Android檢測到內存問題,它將關閉不在前臺的活動,並在需要時再重新創建它們。沒有辦法覆蓋該行爲(實際上唯一的選擇是隨時打開它進行測試)。 –

+0

發佈您用於啓動ShowTestActivity,您的onBackPressed()方法和任何其他相關代碼的代碼。 –

回答

0

對不起,我錯

在Android清單

<activity 
    android:name="plan9.naseemdev.muhammadtaimoor.naseem.Student" 
    android:configChanges="orientation|screenSize" 
    android:noHistory="true" /> 

由於 ' 機器人:noHistory = 「真」' 學生活動被重新創建每次。 刪除此行後,它爲我工作。

0

你可能對其他活動的開始被調用finish()。不要打電話,並沒有完成()開始活動。

+0

不可以。我在活動開始時不打電話給'finish()'。 仍然好奇這是爲什麼發生 – Taimoor

-2

分享您的代碼,以便我可以進一步提供幫助。 也請檢查您是否正確初始化尋呼機適配器。