1 ListFragement介绍

来源:互联网 发布:成都旅游 知乎 编辑:程序博客网 时间:2024/05/22 08:08

1 ListFragement介绍

ListFragment继承于Fragment。因此它具有Fragment的特性,能够作为activity中的一部分,目的也是为了使页面设计更加灵活。

相比Fragment,ListFragment的内容是以列表(list)的形式显示的。

1.1 ListFragment布局

ListFragment的布局默认包含一个list view。因此,在ListFragment对应的布局文件中,必须指定一个 android:id 为 “@android:id/list” 的ListView控件! 若用户向修改list view的,可以在onCreateView(LayoutInflater, ViewGroup, Bundle)中进行修改。当然,用户也可以在ListFragment的布局中包含其它的控件。

下面是ListFragment对应的一个layout示例:

复制代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingLeft="8dp"     android:paddingRight="8dp">    <ListView android:id="@id/android:list"           android:layout_width="match_parent"           android:layout_height="match_parent"           android:background="#00FF00"           android:layout_weight="1"           android:drawSelectorOnTop="false"/>    <TextView android:id="@id/android:empty"           android:layout_width="match_parent"           android:layout_height="match_parent"           android:background="#FF0000"           android:text="No data"/></LinearLayout>
复制代码

ListView中每一行的显示内容,是通过设置适配器来实现的。我们既可以自定义,也可以采用系统默认的layout。后面的应用实例中,会分别列举2种情况下的显示。

 

1.2 绑定数据

ListFragment绑定ListView的数据,必须通过ListFragment.setListAdapter()接口来绑定数据,而不是使用ListView.setAdapter() 或其它方法!

 

 


2 ListFragment应用实例

应用实例说明:建立一个activity,包括2个ListFragment。第1个ListFragment采用中ListView每一行的内容通过android自带的android.R.layout.simple_list_item_1布局来显示;第2个ListFragment每一行的内容通过自定义的layout文件来显示,每一行显示两个文本。

activity对应的layout文件代码:

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >    <fragment         android:name="com.skywang.app.ListFragmentImpl"        android:id="@+id/fragment1"         android:layout_weight="1"        android:layout_width="match_parent"        android:layout_height="match_parent" />    <fragment         android:name="com.skywang.app.ListFragmentSelf"        android:id="@+id/fragment2"         android:layout_weight="1"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>
复制代码

说明
(01) 该layout布局包含两个fragment。

 

activity的代码:

复制代码
package com.skywang.app;import android.os.Bundle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.view.Menu;public class ListFragmentTest extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.list_fragment_test);            }}
复制代码

说明

(01) 在 onCreateView()中,调用list_fragment_impl作为该ListFragment的布局文件。
(02) 在 onCreate()中,通过setListAdapter() 设置android.R.layout.simple_list_item_1为ListView每一行的布局文件,设置cities为其中数据的每一项内容。

 

ListFragmentImpl.java的代码:

复制代码
package com.skywang.app;import android.app.ListFragment;import android.widget.ListView; import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.util.Log;import android.widget.Toast;import android.widget.SimpleAdapter;import java.util.Map;import java.util.HashMap;import java.util.List;import java.util.ArrayList;public class ListFragmentImpl extends ListFragment{    private static final String TAG = "ListFragmentImpl";        private ListView selfList;        String[] cities = {         "Shenzhen",         "Beijing",         "Shanghai",         "Guangzhou",         "Wuhan",         "Tianjing",         "Changsha",         "Xi'an",         "Chongqing",         "Guilin",    };    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {        Log.d(TAG, "onCreateView");        return inflater.inflate(R.layout.list_fragment_impl, container, false);    }        @Override    public void onCreate(Bundle savedInstanceState) {        Log.d(TAG, "onCreate");        super.onCreate(savedInstanceState);        // 设置ListFragment默认的ListView,即@id/android:list        this.setListAdapter(new ArrayAdapter<String>(getActivity(),                 android.R.layout.simple_list_item_1, cities));            }       public void onListItemClick(ListView parent, View v,             int position, long id) {        Log.d(TAG, "onListItemClick");        Toast.makeText(getActivity(),                 "You have selected " + cities[position],                Toast.LENGTH_SHORT).show();    }    }
复制代码

 


list_fragment_impl.xml的内容:

复制代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <!-- ListFragment对应的android:id值固定为"@id/android:list" -->    <ListView        android:id="@id/android:list"        android:layout_width="match_parent"        android:layout_height="match_parent"         android:drawSelectorOnTop="false"        />    </LinearLayout>
复制代码

 

ListFragmentSelf.java的代码:

复制代码
package com.skywang.app;import android.app.ListFragment;import android.widget.ListView; import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.util.Log;import android.widget.Toast;import android.widget.SimpleAdapter;import java.util.Map;import java.util.HashMap;import java.util.List;import java.util.ArrayList;public class ListFragmentSelf extends ListFragment{    private static final String TAG = "ListFragmentImpl";        private ListView selfList;        @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,             Bundle savedInstanceState) {        Log.d(TAG, "onCreateView");        return inflater.inflate(R.layout.list_fragment_self, container, false);    }        @Override    public void onCreate(Bundle savedInstanceState) {        final String[] from = new String[] {"title", "info"};        final int[] to = new int[] {R.id.text1, R.id.text2};                Log.d(TAG, "onCreate");        super.onCreate(savedInstanceState);        // 建立SimpleAdapter,将from和to对应起来        SimpleAdapter adapter = new SimpleAdapter(                this.getActivity(), getSimpleData(),                 R.layout.two_textview, from, to);        this.setListAdapter(adapter);    }       public void onListItemClick(ListView parent, View v,             int position, long id) {        Log.d(TAG, "onListItemClick");        Toast.makeText(getActivity(),                 "You have selected " + position,                Toast.LENGTH_SHORT).show();    }        private List<Map<String, Object>> getSimpleData() {        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();                Map<String, Object> map = new HashMap<String, Object>();        map.put("title", "Ferris wheel");        map.put("info", "Suzhou Ferris wheel");        list.add(map);        map = new HashMap<String, Object>();        map.put("title", "Flower");        map.put("info", "Roser");        list.add(map);        map = new HashMap<String, Object>();        map.put("title", "Disk");        map.put("info", "Song Disk");        list.add(map);                return list;    }}
复制代码

说明

(01) 在 onCreateView()中,调用list_fragment_self作为该ListFragment的布局文件。
(02) 在 onCreate()中,通过setListAdapter() 设置R.layout.two_textview为ListView每一行的布局文件。


list_fragment_self.xml的内容: 

复制代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <!-- ListFragment对应的android:id值固定为"@id/android:list" -->    <ListView        android:id="@id/android:list"        android:layout_width="match_parent"        android:layout_height="match_parent"         android:drawSelectorOnTop="false"        />    </LinearLayout>
复制代码

 

two_textview.xml的内容:

复制代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >        <TextView android:id="@+id/text1"        android:textSize="12sp"        android:textStyle="bold"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <TextView android:id="@+id/text2"        android:textSize="24sp"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>        </LinearLayout>
复制代码

 

 

点击下载:源代码

效果图:

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃完美林3小时后又发烧怎么办 颜值和身材都是负分怎么办 妈妈离婚又有一个孩子我该怎么办 孩子妈妈天天给孩子吃药我该怎么办 被像蚂蚁有翅膀的虫子咬了怎么办 1周半宝宝扭脚丫肿了怎么办 离婚后前夫带孩子走了找不到怎么办 宜昌全视之眼逃出卢浮宫怎么办 qq号被盗了密保手机也被改怎么办 乐视盒子控播平台认证怎么办 购买冲气娃娃被发现了怎么办 买了充气娃娃太美舍不得扔怎么办 一品官老爷账号密码忘了怎么办 苹果手机加声音显示出耳机怎么办 被删除的照片恢复后效果变差怎么办 w10系统玩刺激战场声音小怎么办 宝宝不咳嗽但是喉咙有痰怎么办 深圳限行如果车堵在路上怎么办 奔跑吧qq中奖我填写资料怎么办 微信之前绑定的手机号丢了怎么办 龙之谷手游换装备洗炼材料怎么办 小学生在班上碰到流氓同学怎么办 问道手游仓库密码忘了怎么办 问道手游安全码忘了怎么办 问道手游账号密码忘了怎么办 坐一天一夜长途车腰疼怎么办 智联的简历一直说不完整怎么办 智联招聘简历投错了怎么办 投简历的公司写错面试时怎么办 从原单位辞职后档案一直没提怎么办 手机因一些不良软件扣费怎么办 苹果手机玩崩坏3卡顿怎么办 以前很帅现在变得好难看了怎么办 偷了室友东西被发现了该怎么办 自己不喜欢狗但室友养狗怎么办 夏天身上闷热出很多小红豆怎么办? 海棠果核小孩吃进肚子了怎么办 大了叶海棠有点烂根怎么办? 刚栽的月季花苗叶子蔫了怎么办 对节白蜡盆景叶尖干枯发黑怎么办 婴儿皮肤被大人指甲划出血怎么办