2015-04-16 85 views
-1

我有一個活動,有一個ListView作爲主要活動。當列表中的其中一個項目被選中時,它將啓動一個新的活動,顯示所選項目列表中項目的詳細信息。該代碼運行正常,相關詳情如下:MainActivity在新活動開始時銷燬?

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.d("test","test"); 

    ListView listView=(ListView) findViewById(R.id.name_list); 

    ListAdapter adapter=new SimpleAdapter(this,contactList, 
      R.layout.list_item,new String[]{TAGS[2]},new int[]{R.id.list_name_display}); 

    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
      Intent intent=new Intent(MainActivity.this,SingleContactActivity.class); 
      intent.putExtra(EXTRA_CONTACT_POSITION,position); 
      startActivity(intent); 
     } 
    }); 
} 

新創建的活動有主要的活動,因爲它的母公司,所以當我做了看着它,我按下了按鈕操作欄上返回到列表視圖。然而,Log.d(...)行告訴我,每次我去詳細的信息活動,然後返回到主要活動,主要活動被重新創建。

我不想要這個和我讀這個的方式:https://developer.android.com/training/basics/activity-lifecycle/stopping.html是主要活動應該停止當新的啓動,然後開始,然後恢復上按鈕按下。有人知道我的主要活動被破壞的原因嗎?

感謝您的幫助

編輯: 清單文件

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".SingleContactActivity" 
     android:label="@string/title_activity_single_contact" 
     android:parentActivityName=".MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.jefe.jefecontacts.MainActivity" /> 
    </activity> 
</application> 

+0

你是如何在AndroidManifest中聲明你的主要活動的?你使用的是android:launchMode =「singleTop」 –

+0

@ | - |我只是把文件。我剛剛離開了Android Studio – user50210

+0

的默認值。不幸的是,一次只有一個活動可以活着。改用碎片。 – jyoon

回答

1

嗯..你可以做的就是這個,顯示信息一個新的活動中,用一個對話框來代替。這樣你的活動就保持活躍,所以它不會被重新創建。

,如果你想它在全屏可以使用:MyDialog = new Dialog(mContext, android.R.style.Theme_NoTitleBar_Fullscreen);

使用自己的佈局:MyDialog.setContentView(R.layout.myLayout);

添加按鈕(如後退按鈕):final Button myBackButton = (Button)MyDialog.findViewById(R.id.my_back_button);

,並利用它們:

myBackButton.setOnClickListenernew View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      MyDialog.dismiss(); 
    } 
}); 

或覆蓋鍵:

MyDialog.setOnKeyListener(new Dialog.OnKeyListener() { 

     @Override 
     public boolean onKey(DialogInterface arg0, int keyCode, 
       KeyEvent event) { 
      // TODO Auto-generated method stub 
      if (keyCode == KeyEvent.KEYCODE_BACK) { //Back key pressed 
       MyDialog.dismiss(); 
      } 
      return true; 
     } 
    }); 

希望這會幫助你;)

1

我不想這樣。 。 。

太糟糕了。這就是它的工作原理,你無法做任何事情。

請注意,這並不總是會發生。但它總是會發生,並且你必須編寫你的應用程序,以便它的所有活動都可以被銷燬並且以透明方式重新創建給用戶。這正是「不保留活動」開發者選擇的目的。一個行爲良好的應用程序將完全啓用該選項。

2

檢查您在設備/模擬器中的開發人員選項。特別檢查「不要保留活動」未選中。

注意:您不能始終保證父活動不會被銷燬。如果系統內存不足,則操作系統可能會終止父級活動。您應該爲此做好準備,並在啓動SingleContactActivity之前將所有必要數據保存在父活動中。

相關問題