
1、fragment简介
我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来开发。
简单的例子,新建一个最基本的AndroID空白界面,我们得到的是一个可以显示一个空白界面的app。一个activity对应着一个layout。
但是fragment则是基于activity,突破了已经固定好的layout的限制,在原有的layout中,把布局元素作为容器,动态容纳新的layout。
这样就等于在一个activity中可以拥有多个界面。
2、ListFragment实例讲解
最终效果
最终效果如上图所示
2.1、首先我们先谈一下,准备工作activity_main的布局:activity_main.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical"> <include androID:ID="@+ID/layout_bar" layout="@layout/layout_Title"/> <FrameLayout androID:ID="@+ID/fragment_container" androID:layout_wIDth="fill_parent" androID:layout_height="0dip" androID:layout_weight="1" > </FrameLayout> <include layout="@layout/layout_bottom"/></linearLayout>
这里的线性布局,包含了三个部分(1)layout_Title(2)fragment_container(3)layout_bottom
其中(2)fragment_container就是用来动态加载Listfragment的地方。
2.2、第二点我们看一下被动态加载到fragment_container中的布局:文件fragment_order.xml
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical"> <ListVIEw androID:ID="@+ID/androID:List" androID:scrollbars="none" androID:divIDerHeight="0dp" androID:divIDer="#00000000" androID:ListSelector="#00000000" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" /></relativeLayout>
分析以上的xml可以看出,为了动态加载一个Listfragment,我们为其编写了一个拥有ListVIEw组件的xml,这一点是必须的。
2.3、第三点,我们看一看到底是如何在activity中用什么方式动态的加载Listfragment
我们看一下MainActivity.Java的关键部分
private FragmentManager manager;@OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main);//********************************************* manager = getFragmentManager();manager.beginTransaction().add(R.ID.fragment_container,homefragment,"article").commit();//*********************************************我特殊标记的地方就是用来动态加载的代码。
为了加载fragment,我们要编写一个fragment类,这个类的对象我们可以看到在add函数中被用到,也是在这个地方,将fragmen加载。
使用fragmentManager的add函数来加载,它有三个参数(1)fragment被加载的位置(R.ID.fragment_container)(2)一个fragment对象,这个对象的编写也很重要,等会讲到。(3)为动态加载的fragment起一个名字,这一项,随便起。
2.4、第四步,fragment对象的类的编写
上文中第二步的fragment_order.xml就是被这个类来使用,实例化,正是因为有了这个类才能够将fragment实例化,于是才能被动态加载。
public class Fragment_order extends ListFragment{ private MainActivity parentActivity; private String[] values = new String[] { "快餐店","烤食店","烧鱼店","甜食店","蔬菜店","融合菜店","面条店" }; private int[] images = new int[] { R.drawable.fastfood,R.drawable.roastfood,R.drawable.fishfood,R.drawable.sweetfood,R.drawable.vegetables,R.drawable.multifood,R.drawable.noodles };//用来初始化Listfragmnet每一条项目的资源 @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_order,container,false);//这里用inflate函数,在初始化创建vIEw时返回fragment_order.xml实例 }//下面的部分则是用于将每一条项目的资源放入到ListvIEw的每一个条目中去 @OverrIDe public voID onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); List<Map<String,Object>> List = new ArrayList<Map<String,Object>>(); for (int i = 0; i < values.length; i++) { Map<String,Object> ListItem = new HashMap<String,Object>(); ListItem.put("values",values[i]); ListItem.put("images",images[i]); List.add(ListItem); } SimpleAdapter adapter = new SimpleAdapter(getActivity(),List,R.layout.List_item,new String[] { "values","images" },new int[] { R.ID.storename,R.ID.storePic }); setlistadapter(adapter); }主要想讲一讲simpleAdapter的用法,因为这很重要,如果数据不能和layout绑定,那么就会不能运行成功。
使用simpleAdapter是很重要的。为什么要使用simpleAdapter的原因很简单,绑定数据和layout的工作不可能完全由程序自动完成,数据和layout的对应关系需要自己来定,adapter就是为了把对应的数据绑到对应的layout上
simpleAdapter算是Adapter中比较简单好用的一个
Listitem中用了Map<string,object>的数据格式,代表了每一行内容其中的数据。
List则是一连串的Map<string,object>
我们看simpleAdapter的参数,总共5个:(1)得到当前的activity(2)已经将数据存好了的List(3)又是一个xml,这个xml是用来作为ListvIEw的一条项目的layout,这样一个项目的外观才会被确定(4)这个数组指明了在Map<string,object>中,数据的名称代号是什么,这样adapter在取List的每个条目的数据时,才有参照。这个参数同时和下一个参数有很大关系(5)这个参数是layout中的ID,和上一个参数对应着。由上一个参数的数据的名称作为指导,将每一行的数据可以对应到相应的ID。
2.5、最后把ListvIEw的每一行条目的layout代码写一下:List_item.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical" xmlns:app="http://schemas.androID.com/apk/res-auto"> <linearLayout androID:ID="@+ID/contactitem_layout" androID:layout_height="65.0dip" androID:paddingleft="12dip" androID:background="@drawable/border" androID:padding="2dp" androID:weightSum="1"> <relativeLayout androID:ID="@+ID/avatar_container" androID:layout_wIDth="match_parent" androID:layout_margintop="4dp" androID:layout_height="wrap_content" androID:layout_alignParentleft="true" > <ImageVIEw androID:ID="@+ID/storePic" androID:layout_wIDth="50.0dip" androID:layout_height="50.0dip" androID:src="@drawable/head" /> <TextVIEw androID:ID="@+ID/storename" androID:layout_toRightOf="@+ID/storePic" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:text="No data" /> </relativeLayout> </linearLayout></linearLayout>
最后祝大家新年快乐,鸡年大吉吧!!!
以上是内存溢出为你收集整理的Android之listfragment的使用例子全部内容,希望文章能够帮你解决Android之listfragment的使用例子所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)