Android Fragment的生命周期
Fragment是Android中一种重要的UI组件,是Activity的一部分,可以嵌入到其他Activity中。在使用Fragment时,需要了解它的生命周期,生命周期中的每个阶段都提供了不同的回调方法供我们调用,以便在不同时刻做不同的操作。
Fragment生命周期的各个状态及其对应的回调函数:
-
onAttach():当Fragment与Activity相关联时会调用该方法,即Activity创建了一个Fragment实例,并将其附加到自己上面。
-
onCreate():当Frament被创建时会调用该方法,在这里进行一些初始化的操作。
-
onCreateView():当Fragment视图被创建时会调用该方法,该方法返回该Fragment处理后的View对象。
-
onViewCreated():当Fragment视图被创建后会调用该方法,该方法在onCreateView()后调用,通常完成一些与控件相关的操作。
-
onActivityCreated():当与Fragment相关联的Activity完成onCreate()时会调用该方法,表示Fragment与Activity已经初始化完毕。
-
onStart():当Fragment可见时会调用该方法,通常用于对界面的更新操作等。
-
onResume():当Fragment可见且用户可以与之交互时会调用该方法,此时Fragment处于活动状态。
-
onPause():当Fragment不再处于活动状态时会调用该方法,通常用于保存数据等。
-
onStop():当Fragment完全不可见时会调用该方法,通常在此方法中完成一些清理的工作。
-
onDestroyView():当Fragment视图被销毁时会调用该方法,通常在此方法中销毁一些与控件相关的对象等。
-
onDestroy():当Fragment被销毁时会调用该方法,通常在此方法中进行一些清理的操作。
-
onDetach():当Fragment与Activity解除关联时会调用该方法。
示例1
下面是一个使用Fragment的示例代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
ft.add(R.id.fragment_container, fragment, "example_fragment");
ft.commit();
}
}
在上述代码中,我们创建了一个名为ExampleFragment的Fragment实例,并将其添加到了MainActivity的布局文件中的fragment_container容器中。下面是ExampleFragment类的代码:
public class ExampleFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("ExampleFragment", "onCreate called");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_example, container, false);
Log.d("ExampleFragment", "onCreateView called");
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d("ExampleFragment", "onActivityCreated called");
}
@Override
public void onStart() {
super.onStart();
Log.d("ExampleFragment", "onStart called");
}
@Override
public void onResume() {
super.onResume();
Log.d("ExampleFragment", "onResume called");
}
@Override
public void onPause() {
super.onPause();
Log.d("ExampleFragment", "onPause called");
}
@Override
public void onStop() {
super.onStop();
Log.d("ExampleFragment", "onStop called");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d("ExampleFragment", "onDestroyView called");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("ExampleFragment", "onDestroy called");
}
@Override
public void onDetach() {
super.onDetach();
Log.d("ExampleFragment", "onDetach called");
}
}
在ExampleFragment中,我们重写了Fragment的生命周期回调方法,每个方法中我们都打印了相应的log信息,用于观察生命周期的调用顺序。在运行示例程序时,我们可以查看log信息,以了解Fragment生命周期的状态变化过程。
示例2
假设我们的Fragment需要接收一些从Activity传递过来的参数,我们可以使用Bundle来实现这个功能。下面是一个更完整的示例代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
/* 创建ExampleFragment实例,并将参数传递给Fragment */
ExampleFragment fragment = new ExampleFragment();
Bundle bundle = new Bundle();
bundle.putString("text", "Hello");
fragment.setArguments(bundle);
ft.add(R.id.fragment_container, fragment, "example_fragment");
ft.commit();
}
}
public class ExampleFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("ExampleFragment", "onCreate called");
/* 获取从Activity传递过来的参数 */
Bundle bundle = getArguments();
if (bundle != null) {
String text = bundle.getString("text");
Log.d("ExampleFragment", "text: " + text);
}
}
/* 其他生命周期方法省略 */
}
在上述代码中,我们创建了一个名为bundle的Bundle实例,并将字符串"Hello"放入其中,然后将bundle作为参数传递给ExampleFragment,并在onCreate()中获取了这个参数。这个示例同时也展示了在Fragment中创建并获取参数的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android的Fragment的生命周期各状态和回调函数使用 - Python技术站