目录
一、启动fragment1时,fragment1和activity的生命周期状态。
二、 按home时,两者(fragment1和activity)生命周期的状态。
三、 按back时,两者(fragment1和activity)的状态。
四、 从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?
问题描述
①启动fragment1时,fragment1和activity的生命周期状态。
②按home时,两者(fragment1和activity)生命周期的状态。
③按back时,两者(fragment1和activity)的状态。
④从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?
⑤从fragment2返回fragment1时,是什么?
附:按crtl+O可以快速搜索on函数
问题分析
一、启动fragment1时,fragment1和activity的生命周期状态。
打开界面:onCreate()-->onCreateView()-->onViewCreated()-->onStart()-->onResume()
验证如下:
二、 按home时,两者(fragment1和activity)生命周期的状态。
按主屏键:onPause()-->onStop()
验证如下:
三、 按back时,两者(fragment1和activity)的状态。
onPause-->onStop-->onDestroyView()-->onDestroy()-->onDetach()
四、 从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?
五、从fragment2返回fragment1时,是什么?
代码
附:所以代码均在DynamicFragment项目中。
MainActivity.java
package com.example.dynamicfragment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
RadioGroup rg;
RadioButton b1,b2,b3,b4;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TAG","Activity:onCreate");
setContentView(R.layout.activity_main);
rg=findViewById(R.id.rg1);
b1=findViewById(R.id.rb1);
b2=findViewById(R.id.rb2);
b3=findViewById(R.id.rb3);
b4=findViewById(R.id.rb4);
rg.setOnClickListener(this);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
Log.d("TAG","Activity:onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d("TAG","Activity:onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("TAG","Activity:onRestart");
}
@Override
protected void onPause() {
super.onPause();
Log.d("TAG","Activity:onPaused");
}
@Override
protected void onStop() {
super.onStop();
Log.d("TAG","Activity:onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("TAG","Activity:onDestroy");
}
@Override
public void onBackPressed() {
super.onBackPressed();
Log.d("TAG","Activity:onBackPressed");
}
@Override
public void onClick(View view) {
String i= getResources().getResourceEntryName(view.getId());
switch(i){
case "rb1":
// Bundle bundle=new Bundle();
// bundle.putString("msg","lalala");
BlankFragment1 fb= new BlankFragment1();
// Fragment fb = new BlankFragment1();
// fb.setArguments(bundle);//传参数
fb.setIFragmentCallback(new IFragmentCallback() {
@Override
public void sendMsgToAct(String str) {
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
}
@Override
public String receiveMsgFromAct() {
return "receive";
}
});
entry_fragment(fb);
break;
case "rb2":
entry_fragment(new BlankFragment2());
break;
case "rb3":
entry_fragment(new BlankFragment3());
break;
case "rb4":
entry_fragment(new BlankFragment4());
break;
default:
throw new IllegalStateException("Unexpected value:" +view.getId());
}
}
private void entry_fragment(Fragment f) {
FragmentManager fm =getSupportFragmentManager();
FragmentTransaction ft=fm.beginTransaction(); //开始交易
ft.replace(R.id.fl,f);
ft.addToBackStack(null);
ft.commit();
}
}
BlankFragment1.java
package com.example.dynamicfragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import java.util.zip.Inflater;
/**
* A simple {@link Fragment} subclass.
* Use the {@link BlankFragment1#newInstance} factory method to
* create an instance of this fragment.
* @noinspection UnresolvedClassReferenceRepair
*/
public class BlankFragment1 extends Fragment {
Button bt3,bt4;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public BlankFragment1() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment BlankFragment1.
*/
// TODO: Rename and change types and number of parameters
public static BlankFragment1 newInstance(String param1, String param2) {
BlankFragment1 fragment = new BlankFragment1();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
private IFragmentCallback callback;//定义接口
public void setIFragmentCallback(IFragmentCallback i){callback=i;}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TAG","Fragment1:onCreate");
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
// Bundle bundle=this.getArguments();
// String str=bundle.getString("msg");
// Log.d("fragment1",str);
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
Log.d("TAG","Fragment1:onAttach");
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.d("TAG","Fragment1:onViewCreated");
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
Log.d("TAG","Fragment1:onViewStateRestored");
}
@Override
public void onStart() {
super.onStart();
Log.d("TAG","Fragment1:onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d("TAG","Fragment1:onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d("TAG","Fragment1:onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d("TAG","Fragment1:onStop");
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
Log.d("TAG","Fragment1:onSaveInstanceState");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d("TAG","Fragment1:onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG","Fragment1:onDestroy");
}
@Override
public void onDetach() {
super.onDetach();
Log.d("TAG","Fragment1:onDetach");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("TAG","Fragment1:onCreateView");
// Inflate the layout for this fragment
View root=inflater.inflate(R.layout.fragment_blank1, container, false);
@SuppressLint({"MissingInflatedId", "LocalSuppress"})
Button sendBT = root.findViewById(R.id.bt3);
//告知return的内容
sendBT.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callback.sendMsgToAct("11.2victory");
}
});
Button btr = root.findViewById(R.id.bt4);
btr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String recStr = (String) callback.receiveMsgFromAct();
Toast.makeText(BlankFragment1.this.getContext(),recStr,Toast.LENGTH_SHORT).show();
}
});
//Log.d(TAG,"OncreateView");
return root;
// return inflater.inflate(R.layout.fragment_blank1, container, false);
}
}
BlankFragment2.java
package com.example.dynamicfragment;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
* Use the {@link BlankFragment2#newInstance} factory method to
* create an instance of this fragment.
*/
public class BlankFragment2 extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public BlankFragment2() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment BlankFragment2.
*/
// TODO: Rename and change types and number of parameters
public static BlankFragment2 newInstance(String param1, String param2) {
BlankFragment2 fragment = new BlankFragment2();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TAG","Fragment2:onCreate");
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
Log.d("TAG","Fragment2:onAttach");
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.d("TAG","Fragment2:onViewCreated");
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
Log.d("TAG","Fragment2:onViewStateRestored");
}
@Override
public void onStart() {
super.onStart();
Log.d("TAG","Fragment2:onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d("TAG","Fragment2:onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d("TAG","Fragment2:onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d("TAG","Fragment2:onStop");
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
Log.d("TAG","Fragment2:onSaveInstanceState");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d("TAG","Fragment2:onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG","Fragment2:onDestroy");
}
@Override
public void onDetach() {
super.onDetach();
Log.d("TAG","Fragment2:onDetach");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.d("TAG","Fragment2:onCreateView");
return inflater.inflate(R.layout.fragment_blank2, container, false);
}
}