測試項目
FragmentActivity
public class FragmentActivity extends AppCompatActivity {
private FrameLayout frameLayout;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
frameLayout = findViewById(R.id.fl_content);
button = findViewById(R.id.btn_click);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fTwo = new FragmentOne();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl_content, fTwo, "One");
tx.addToBackStack(null);//添加回退棧
tx.commit();
System.out.println("fm.getBackStackEntryCount() = " + fm.getBackStackEntryCount());
}
});
}
}
FragmentOne(FragmentTwo、FragmentThree同理)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View mView = inflater.inflate(R.layout.fragment_one, container, false);
editText = mView.findViewById(R.id.et_input);
button = mView.findViewById(R.id.btn_next);
System.out.println("mView.findViewById = "+editText);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fTwo = new FragmentTwo();
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl_content, fTwo, "TWO");
tx.addToBackStack(null);
tx.commit();
System.out.println( "fm.getBackStackEntryCount() = "+ fm.getBackStackEntryCount());
}
});
return mView;
}
@Override
public void onStop() {
super.onStop();
Log.d("Tina======>", "onStop");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d("Tina======>", "onDestroyView"+editText);
}
@Override
public void onDetach() {
super.onDetach();
Log.d("Tina======>", "onDetach");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("Tina======>", "onDestroy");
}
前提條件是添加fragmet的時候都是用的replace(先remove 後add)
操作1:
全部添加回退棧的操作
生命週期
開啓的時候,打開到第三個fragment
回退的時候
操作2:
fragmentOne不加回退棧,其他加
生命週期
開啓的時候
回退的時候
結論
1.replace 會銷燬視圖,生命週期走到了onDestroyView
2.加入回退棧,返回的時候,fragment還可以重新顯示出來,否則返回的時候,就直接銷燬了
3.加入回退棧後,返回時會重新走onCreateView方法,重新綁定視圖,也就是說,實例對象會變
舉例:recyclerview的話,返回回來後,之前setAdapter就沒有了,因爲對象換了
注意有一個還會是原來的值,是因爲它對數據有保存,他就是edictText(要有id值)