Android之listfragment的使用例子

发布时间 - 2026-01-10 22:48:27    点击率:

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"
    style="@style/MMListItem"
    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"
        style="@style/MMFontTitleInList"
        android:layout_toRightOf="@+id/storePic"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:text="No data" />
      </RelativeLayout>

  </LinearLayout>

</LinearLayout>

最后祝大家新年快乐,鸡年大吉吧!!!


# Android  # listfragment 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何在建站之星绑定自定义域名?  北京网站制作公司哪家好一点,北京租房网站有哪些?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  使用C语言编写圣诞表白程序  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  如何快速使用云服务器搭建个人网站?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  深圳网站制作的公司有哪些,dido官方网站?  如何批量查询域名的建站时间记录?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel用户密码怎么加密_Laravel Hash门面使用教程  js实现获取鼠标当前的位置  Linux系统命令中screen命令详解  网站制作企业,网站的banner和导航栏是指什么?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在云指建站中生成FTP站点?  BootStrap整体框架之基础布局组件  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  香港服务器如何优化才能显著提升网站加载速度?  如何用IIS7快速搭建并优化网站站点?  Bootstrap整体框架之JavaScript插件架构  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何在阿里云ECS服务器部署织梦CMS网站?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何快速生成高效建站系统源代码?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  装修招标网站设计制作流程,装修招标流程?  浅谈javascript alert和confirm的美化  如何用花生壳三步快速搭建专属网站?  如何挑选高效建站主机与优质域名?  实例解析angularjs的filter过滤器  详解jQuery中的事件  如何快速辨别茅台真假?关键步骤解析  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  Python文本处理实践_日志清洗解析【指导】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何快速搭建个人网站并优化SEO?  Laravel如何创建自定义Facades?(详细步骤)