当前位置: 移动技术网 > 移动技术>移动开发>Android > 实例讲解Android应用开发中Fragment生命周期的控制

实例讲解Android应用开发中Fragment生命周期的控制

2019年07月24日  | 移动技术网移动技术  | 我要评论
一、fragment的生命周期初探 因为fragment必须嵌入在acitivity中使用,所以fragment的生命周期和它所在的activity是密切相关的。 如果

一、fragment的生命周期初探

因为fragment必须嵌入在acitivity中使用,所以fragment的生命周期和它所在的activity是密切相关的。

如果activity是暂停状态,其中所有的fragment都是暂停状态;如果activity是stopped状态,这个activity中所有的fragment都不能被启动;如果activity被销毁,那么它其中的所有fragment都会被销毁。

但是,当activity在活动状态,可以独立控制fragment的状态,比如加上或者移除fragment。

当这样进行fragment transaction(转换)的时候,可以把fragment放入activity的back stack中,这样用户就可以进行返回操作。

使用fragment时,需要继承fragment或者fragment的子类(dialogfragment, listfragment, preferencefragment, webviewfragment),所以fragment的代码看起来和activity的类似。

每当创建一个fragment时,首先添加以下三个回调方法:

oncreate():系统在创建fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。
oncreateview():当第一次绘制fragment的ui时系统调用这个方法,该方法将返回一个view,如果fragment不提供 ui也可以返回null。注意,如果继承自listfragment,oncreateview()默认的实现会返回一个listview,所以不用自己 实现。
onpause():当用户离开fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。
将fragment加载到activity当中有两种方式:

方式一:添加fragment到activity的布局文件当中
方式二:在activity的代码中动态添加fragment(荐)
第一种方式虽然简单但灵活性不够。添加fragment到activity的布局文件当中,就等同于将fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。

第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。

二、生命周期控制实例

package com.goso.testapp;

import android.app.activity;
import android.app.listfragment;
import android.os.bundle;
import android.util.log;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.arrayadapter;
import android.widget.listview;

/**
 * demonstration of using listfragment to show a list of items
 * from a canned array.
 */
public class fragmentlistarray extends activity {

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    log.e("hjj", "activity &&&& oncreate...");
    // create the list fragment and add it as our sole content.
    if (getfragmentmanager().findfragmentbyid(android.r.id.content) == null) {
      arraylistfragment list = new arraylistfragment();
      getfragmentmanager().begintransaction().add(android.r.id.content, list).commit();
    }
  }

  @override
  protected void onstart() {
   // todo auto-generated method stub
   super.onstart();
   log.e("hjj", "activity &&&& onstart...");
  }
  
  @override
  protected void onresume() {
   // todo auto-generated method stub
   super.onresume();
   log.e("hjj", "activity &&&& onresume...");
  }
  
  @override
  protected void onstop() {
   // todo auto-generated method stub
   super.onstop();
   log.e("hjj", "activity &&&& onstop...");
  }
  
  @override
  protected void onpause() {
   // todo auto-generated method stub
   super.onpause();
   log.e("hjj", "activity &&&& onpause...");
  }
  
  @override
  protected void ondestroy() {
   // todo auto-generated method stub
   super.ondestroy();
   log.e("hjj", "activity &&&& ondestroy...");
  }
  
  public static class arraylistfragment extends listfragment {

   @override
   public void onattach(activity activity) {
   // todo auto-generated method stub
   log.e("hjj", "arraylistfragment **** onattach...");
   super.onattach(activity);
   }
   
   @override
   public void oncreate(bundle savedinstancestate) {
   // todo auto-generated method stub
   log.e("hjj", "arraylistfragment **** oncreate...");
   super.oncreate(savedinstancestate);
   }
   
   @override
   public view oncreateview(layoutinflater inflater, viewgroup container,
    bundle savedinstancestate) {
   // todo auto-generated method stub
   log.e("hjj", "arraylistfragment **** oncreateview...");
   return super.oncreateview(inflater, container, savedinstancestate);
   }
   
    @override
    public void onactivitycreated(bundle savedinstancestate) {
      super.onactivitycreated(savedinstancestate);
      log.e("hjj", "arraylistfragment **** onactivitycreated...");
      string[] array = new string[]{"c++", "java", "python"};
      setlistadapter(new arrayadapter<string>(getactivity(),
          android.r.layout.simple_list_item_1, array));
    }

    @override
    public void onstart() {
     // todo auto-generated method stub
     log.e("hjj", "arraylistfragment **** onstart...");
     super.onstart();
    }
    
    @override
    public void onresume() {
     log.e("hjj", "arraylistfragment **** onresume...");
     // todo auto-generated method stub
     super.onresume();
    }
    
    @override
    public void onpause() {
     log.e("hjj", "arraylistfragment **** onpause...");
     // todo auto-generated method stub
     super.onpause();
    }
    
    @override
    public void onstop() {
     log.e("hjj", "arraylistfragment **** onstop...");
     // todo auto-generated method stub
     super.onstop();
    }
    
    @override
    public void ondestroyview() {
     log.e("hjj", "arraylistfragment **** ondestroyview...");
     // todo auto-generated method stub
     super.ondestroyview();
    }
    
    @override
    public void ondestroy() {
     // todo auto-generated method stub
     log.e("hjj", "arraylistfragment **** ondestroy...");
     super.ondestroy();
    }
    
    @override
    public void ondetach() {
     log.e("hjj", "arraylistfragment **** ondetach...");
     // todo auto-generated method stub
     super.ondetach();
    }
    
    @override
    public void onlistitemclick(listview l, view v, int position, long id) {
      log.i("fragmentlist", "item clicked: " + id);
    }
  }
}

结果:
oncreate过程

01-22 15:30:28.091: e/hjj(10315): activity &&&& oncreate...
01-22 15:30:28.091: e/hjj(10315): arraylistfragment **** onattach...
01-22 15:30:28.091: e/hjj(10315): arraylistfragment **** oncreate...
01-22 15:30:28.115: e/hjj(10315): arraylistfragment **** oncreateview...
01-22 15:30:28.123: e/hjj(10315): arraylistfragment **** onactivitycreated...

onstart过程

01-22 15:30:28.123: e/hjj(10315): activity &&&& onstart...
01-22 15:30:28.123: e/hjj(10315): arraylistfragment **** onstart...

onresume过程

01-22 15:30:28.123: e/hjj(10315): activity &&&& onresume...
01-22 15:30:28.123: e/hjj(10315): arraylistfragment **** onresume...

onpause过程

01-22 15:31:26.748: e/hjj(10315): arraylistfragment **** onpause...
01-22 15:31:26.748: e/hjj(10315): activity &&&& onpause...

onstop过程

01-22 15:31:27.638: e/hjj(10315): arraylistfragment **** onstop...
01-22 15:31:27.638: e/hjj(10315): activity &&&& onstop...

onstart过程

01-22 15:31:57.537: e/hjj(10315): activity &&&& onstart...
01-22 15:31:57.537: e/hjj(10315): arraylistfragment **** onstart...

onresume过程

01-22 15:31:57.537: e/hjj(10315): activity &&&& onresume...
01-22 15:31:57.537: e/hjj(10315): arraylistfragment **** onresume...

onpause过程

01-22 15:32:47.412: e/hjj(10315): arraylistfragment **** onpause...
01-22 15:32:47.412: e/hjj(10315): activity &&&& onpause...

onstop过程

01-22 15:32:47.865: e/hjj(10315): arraylistfragment **** onstop...
01-22 15:32:47.865: e/hjj(10315): activity &&&& onstop...

ondestroy过程

01-22 15:32:47.865: e/hjj(10315): arraylistfragment **** ondestroyview...
01-22 15:32:47.865: e/hjj(10315): arraylistfragment **** ondestroy...
01-22 15:32:47.865: e/hjj(10315): arraylistfragment **** ondetach...
01-22 15:32:47.865: e/hjj(10315): activity &&&& ondestroy...

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网