package com.advanced_android.fragmenttransactionsample;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private static final String FRAGMENT_TAG = "FRAGMENT_TAG";
private static final String KEY_NUMBER = "KEY_NUMBER";
private int mNumber = 0;
private FragmentManager.OnBackStackChangedListener mListener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fragmentManager = getSupportFragmentManager();
int count = 0;
for (Fragment f : fragmentManager.getFragments()) {
if (f != null) {
count++;
}
}
mNumber = count;
Log.d("MainActivity", "onBackStackChanged mNumber=" + mNumber);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.add_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.fragment_container, MyFragment.getInstance(mNumber))
.addToBackStack(null)
.commit();
}
});
findViewById(R.id.remove_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mNumber == 0) {
return;
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack();
}
});
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.addOnBackStackChangedListener(mListener);
Fragment fragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG);
Log.d("MainActivity", "onCreate fragment=" + fragment + ", mNumber=" + mNumber);
if (savedInstanceState == null) {
fragmentManager.beginTransaction()
.add(R.id.fragment_container, MyFragment.getInstance(mNumber), FRAGMENT_TAG)
.addToBackStack(null)
.commit();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.removeOnBackStackChangedListener(mListener);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_NUMBER, mNumber);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mNumber = savedInstanceState.getInt(KEY_NUMBER);
}
}
package com.advanced_android.fragmenttransactionsample;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyFragment extends Fragment {
private static final String ARG_NO = "ARG_NO";
public MyFragment() {
}
public static MyFragment getInstance(int no) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt(ARG_NO, no);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_my, container, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int no = getArguments().getInt(ARG_NO, 0);
String text = "" + no + "番目のFragment";
Log.d("MyFragment", "onCreate " + text);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView textView = (TextView) view.findViewById(R.id.text);
int no = getArguments().getInt(ARG_NO, 0);
String text = "" + no + "番目のFragment";
Log.d("MyFragment", "onViewCreated " + text);
textView.setText(text);
}
}