Fragment.onDestroy

Fragment.onDestroyは、Fragmentの破棄時に呼び出される。

Fragment  |  Android Developers

Fragment1.javaで、

onDestroyでもログを出しておく。
Fragment2.javaも、

同様にonDestroyでログを出す。
MainActivity.javaは、

package com.bgstation0.android.sample.fragment_;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

// メインアクティビティ
public class MainActivity extends Activity implements OnClickListener{

	// 生成時
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	
    	// 既定の処理.
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // Button1の処理.
        Button button1 = (Button)findViewById(R.id.button1);	// button1を取得.
        button1.setOnClickListener(this);	// リスナーとしてthisをセット.
        
        // Button2の処理.
        Button button2 = (Button)findViewById(R.id.button2);	// button2を取得.
        button2.setOnClickListener(this);	// リスナーとしてthisをセット.
        
    }
    
    // クリック時
    public void onClick(View v){
    	
    	// FragmentManager, fragmentTransactionの取得.
    	FragmentManager fragmentManager = getFragmentManager();	// fragmentManagerの取得.
    	FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();	// fragmentTransactionの取得.
    	
    	// Buttonごとに分ける.
    	int id = v.getId();	// v.getIdでidを取得.
    	if (id == R.id.button1){	// button1なら.
    		Fragment1 fragment1 = new Fragment1();	// fragment1を生成.
    		fragmentTransaction.add(R.id.framelayout1, fragment1);	// fragment1を追加.
    		fragmentTransaction.commit();	// コミット.
    	}
    	else if (id == R.id.button2){	// button2なら.
    		Fragment2 fragment2 = new Fragment2();	// fragment2を生成.
    		fragmentTransaction.add(R.id.framelayout1, fragment2);	// fragment2を追加.
    		fragmentTransaction.commit();	// コミット.
    	}
    	
    }
    
}

まず、addで追加。

addの場合
addの場合

addの場合は、

onDestroyは呼ばれない
onDestroyは呼ばれない

onDestroyは呼ばれない。

回転した場合
回転した場合

回転した場合、

いったん破棄されるので呼ばれる
いったん破棄されるので呼ばれる

いったん破棄されるので呼ばれる。

replaceの場合、

Fragment1への置換だけなら
Fragment1への置換だけなら

Fragment1への置換だけなら、

まだ呼ばれない
まだ呼ばれない

まだ呼ばれない。

Fragment2に置換すると
Fragment2に置換すると

Fragment2に置換すると、

onDestroyが呼ばれる
onDestroyが呼ばれる

Fragment1のonDestroyが呼ばれる。

Sample/android/Fragment/onDestroy/src/Fragment at master · bg1bgst333/Sample · GitHub