欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Fragment使用之实例演示

程序员文章站 2024-03-07 11:51:57
          fragment是android honeycomb 3.0新...

          fragment是android honeycomb 3.0新增的概念,在如何使用android fragment中做了关于fragment的详细介绍。本文则主要是通过实例的方式让大家更直观的了解fragment的使用方法。

       首先贴上实例的运行效果截图:

Android Fragment使用之实例演示

       效果图的左边是一个列表,右边是列表item的详情。

       先看一下布局文件(layout):

xml/html代码

<?xml version=“1.0″ encoding=“utf-8″?> 
<linearlayout xmlns:android=“http://schemas.android.com/apk/res/android”  
  android:orientation=“horizontal” android:layout_width=“match_parent”  
  android:layout_height=“match_parent”> 
  <fragment 
    class=“com.fragment.main.titlesfragment”  
    android:id=“@+id/titles” android:layout_weight=“1″  
    android:layout_width=“0px” android:layout_height=“match_parent” /> 
  <framelayout android:id=“@+id/details” android:layout_weight=“1″  
    android:layout_width=“0px” android:layout_height=“match_parent”  
    android:background=“?android:attr/detailselementbackground” /> 
</linearlayout> 

       布局文件中使用了fragment标签和framelayout标签。如何使用android fragment中介绍了两中嵌入fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,framelayout标签将会成为第二种加载fragment的载体view。

       看一下程序实现(com.fragment.main.titlesfragment):

java代码

public class titlesfragment extends listfragment {  
  
  int mcurcheckposition = 0;  
  int mshowncheckposition = -1;  
  
  @override 
  public void onactivitycreated(bundle savedinstancestate) {  
    super.onactivitycreated(savedinstancestate);  
                              
    setlistadapter(new arrayadapter<string>(getactivity(),  
        android.r.layout.simple_list_item_activated_1,  
        shakespeare.titles)); //使用静态数组填充列表  
    if (savedinstancestate != null) {  
      mcurcheckposition = savedinstancestate.getint(“curchoice”, 0);  
      mshowncheckposition = savedinstancestate.getint(“shownchoice”, -1);  
    }  
      getlistview().setchoicemode(listview.choice_mode_single);  
      showdetails(mcurcheckposition);  
  }  
  
  @override 
  public void onsaveinstancestate(bundle outstate) {  
    super.onsaveinstancestate(outstate);  
  
    outstate.putint(“curchoice”, mcurcheckposition);  
    outstate.putint(“shownchoice”, mshowncheckposition);  
  }  
  
  @override 
  public void onlistitemclick(listview l, view v, int position, long id) {  
    showdetails(position);  
  }  
  
  /** 
   *显示listview item 详情 
   */ 
  void showdetails(int index) {  
    mcurcheckposition = index;  
      getlistview().setitemchecked(index, true);  
  
      if (mshowncheckposition != mcurcheckposition) {  
  
        detailsfragment df = detailsfragment.newinstance(index);  
         fragmenttransaction ft = getfragmentmanager()  
            .begintransaction();  
        ft.replace(r.id.details, df);  
        ft.settransition(fragmenttransaction.transit_fragment_fade);  
        ft.commit();  
        mshowncheckposition = index;  
      }    
  }  
  
} 

       titlesfragment继承自fragment的子类listfragment,使用了一个静态数组填充列表,重写了onlistitemclick方法,showdetails方法展示listview item的详情。

java代码

detailsfragment df = detailsfragment.newinstance(index);//获取详情fragment的实例  
fragmenttransaction ft = getfragmentmanager().begintransaction();//获取fragmenttransaction 实例  
ft.replace(r.id.details, df); //使用detailsfragment 的实例  
ft.settransition(fragmenttransaction.transit_fragment_fade);  
ft.commit();//提交 

       这里就使用到了android fragment使用中介绍的第二种加载fragment的方法。看一下detailsfragment :

java代码

public class detailsfragment extends fragment {  
  
  /**   * create a new instance of detailsfragment, initialized to   * show the text at 'index'.   */ 
  public static detailsfragment newinstance(int index) {  
    detailsfragment f = new detailsfragment();  
    // supply index input as an argument.      
    bundle args = new bundle();  
    args.putint(“index”, index);  
    f.setarguments(args);  
    return f;  
  }  
  
  @override 
  public view oncreateview(layoutinflater inflater, viewgroup container,  
      bundle savedinstancestate) {  
    if (container == null) {        
      return null;  
    }  
    scrollview scroller = new scrollview(getactivity());  
    textview text = new textview(getactivity());  
  
    int padding = (int) typedvalue.applydimension(  
        typedvalue.complex_unit_dip, 4, getactivity().getresources()  
            .getdisplaymetrics());  
    text.setpadding(padding, padding, padding, padding);  
    scroller.addview(text);  
    text.settext(shakespeare.dialogue[getarguments().getint("index", 0)]);  
    return scroller;  
  }  
} 

       detailsfragment 中使用newinstance(int index)方法产生detailsfragment 实例并接受整型参数,重载了oncreateview方法创建view。

       这个例子基本完成了,主要介绍的是在3.0以后的使用方法,其实fragment在sdk1.6之后就可以使用了,在1.6上使用需要借助 android-support-v4.jar包实现。android-support-v4.jar在:sdk根目录\extras\android \compatibility\v4下可以找到。

          以上就是对android fragment的资料整理,后续继续添加相关资料,谢谢大家对本站的支持!