课堂笔记_02_LIstView

1. ListView

LIstView是一个ViewGroup的子类,以数组的形式存放子控件,通过上下滑动来展示所有控件。使用ListView首先要实现ListAdapter类适配器,Android SDK提供了多个ListAdapter类适配器,最常用的是ArrayAdapter<T>和BaseAdapter。ArrayAdapter<T>相当于BaseAddapter中内置了一个ArrayList,指定泛型后可以使用ArrayAdapter中的add(T)方法添加对象不需要自己新建数组。

实现Adapter时主要是改写getView方法,ListView会调用getView方法来得到每一个view,然后将view依次展现在屏幕中

2. GridView

GridView与ListView类似,以网格的形式将适配器中的view展现在屏幕中

android:numColumns设置显示的列数

android:columnWidth 设置列的宽度

android;horizontalSpacing 设置列的水平间距

android:verticalSpacing 设置行间距


3. 练习:模仿微信关于页面

3.1首先新建项目WeChatTest,在activity_main.xml中添加ListView

<ListView
    android:id="@+id/list_view"
    android:layout_below="@+id/tbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

3.2新建一个ListViewItem类用来存放提供给LIstView的数据

public class ListViewItem {
    private String item="";

    ListViewItem(String str){
        item=str;
    }
}

3.3设置适配器继承于ArrayAdapter并指定泛型

    写构造器方法接受Context上下文和布局文件

    重写getView方法

 /** Created by chao on 7/23/16.
 */
public class WeChatArrayAdapter extends ArrayAdapter<ListViewItem> {
    private Context context;
    private int resurces;
    private ViewHolder viewholder;

    /**
     *
     * @param context
     * @param resurces
     */
    //构造器接受Context上下文和LIstView中的子布局文件
    WeChatArrayAdapter(Context context,int resurces){
        super(context,resurces);
        this.context=context;
        this.resurces=resurces;
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        //通过position找到用来存放数据的对象
        ListViewItem item=getItem(position);
        View view;
        
        //ViewHolder用来保存View对象以便复用
        viewholder = new ViewHolder();
        
        if(convertView==null){
            //如果convertView为空,即没有可回收的View时通过LayoutInflater来解析布局文件
            view= LayoutInflater.from(context).inflate(resurces,null);
            viewholder.textView=(TextView) view.findViewById(R.id.view_item);
            //textView保存起来
            view.setTag(viewholder);
        }else{
            //当有可回收的View时,直接使用
            view=convertView;
            viewholder =(ViewHolder) view.getTag();
        }
        
        //将数据添加到相应的控件中
        viewholder.textView.setText(item.getItem());
        
        //设置ListView中子控件的点击事件
        viewholder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,position+"",Toast.LENGTH_SHORT).show();
            }
        });

        return view;
    }

    class ViewHolder{
        public  TextView textView;
    }
}

3.4 在MainActivity中新建适配器并初始化

//新建适配器传入布局文件
WeChatArrayAdapter adapter=new WeChatArrayAdapter(this,R.layout.list_view_item);
//初始化适配器
initAdapter(adapter);

public void initAdapter(WeChatArrayAdapter adapter){
    adapter.add(new ListViewItem("去评分"));
    adapter.add(new ListViewItem("功能介绍"));
    adapter.add(new ListViewItem("系统通知"));
    adapter.add(new ListViewItem("帮助与反馈"));
    adapter.add(new ListViewItem("投诉"));
    adapter.add(new ListViewItem("检查新版本"));
}

    找到ListView设置Adapter

//找到ListView设置Adapter
ListView listView=(ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);

    

3.5 添加HeadView和FooterView

    新建header_view.xml文件

<?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:clickable="false">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="70dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/acf"
        android:scaleType="centerInside"
        android:layout_marginTop="30dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/wechat_number"
        android:textSize="18sp"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="20dp"
        />

</LinearLayout>


    新建footer_view.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/text_view_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/copyright3"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/text_view_2"
        android:layout_marginBottom="8dp"
        />

    <TextView
        android:id="@+id/text_view_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/copyright2"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/text_view_1"/>

    <TextView
        android:id="@+id/text_view_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/copyright"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/text_view_privacy"/>

    <TextView
        android:id="@+id/text_view_privacy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/terms_privacy"
        android:textSize="16sp"
        android:textColor="#5C6BC0"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="8dp"
        android:layout_centerHorizontal="true"
        android:background="@android:drawable/list_selector_background"
        />

</RelativeLayout>

在MainActivity中设置HeaderView和FooderView

View headerView= LayoutInflater.from(this).inflate(R.layout.header_view,null);
View footerView=LayoutInflater.from(this).inflate(R.layout.footer_view,null);

添加到ListView

listView.addHeaderView(headerView,null,false);
listView.addFooterView(footerView,null,false);

3.6编译运行结果




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值