ListView的用法

ListeView

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

1.ArrayAdapter(详细地址:http://www.cnblogs.com/wenjiang/p/3196205.html)

ArrayAdapter最为简单,只能展示一行字。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。
1.在xml文件中添加ListView控件;
2.在mainActivity中初始化ListView;
3.使用ArrayAdapter(Context context, int textViewResourceId, List<T> objects)来装配数据(ArrayAdapter的构造需要三个元素(this,布局文件,数据));
4.绑定ArrayAdapter;
5.添加布局
public class MainActivity extends ActionBarActivity {
    //声明一个listView
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建一个一个list对象
        listView = new ListView(this);

        //使用ArrayAdapter(Context context, int textViewResourceId, List<T> objects)来装配数据
        //ArrayAdapter的构造需要三个元素(this,布局文件,数据)
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,getDate());

        //绑定ArrayAdapter
        listView.setAdapter(arrayAdapter);

        //执行布局
        setContentView(listView);

    } 

//getDete方法得到ListView内容
    private List<String> getDate(){

        List<String> date = new ArrayList<String>();
        date.add("1");
        date.add("2");
        date.add("3");
        date.add("4");
        date.add("5");
        return
date;
    }

}

2.SimpleAdapter

SimpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。

1.根据需要定义ListView每行所实现的布局
2.定义一个HashMap构成的列表,将数据以键值对的方式存放在里
3.构造SimpleAdapter对象。
4.将LsitView绑定到SimpleAdapter上。

3.MyAdapter继承BaseAdapter

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖。这时候最方便的方法就是使用灵活的适配器BaseAdapter了。

备注:使用BaseAdapter必须写一个类继承它,同时BaseAdapter是一个抽象类,继承它必须实现它的方法。

1.创建list<Map<String,Object>>
2.用hashmap 存放数据,添加到list内
3.创建MyAdapter类继承BaseAdapter类,并实现父类方法;其中首先调用getCount()方法,得到它的返回值,即ListView的长度。然后系统调用getView()方法,根据这个长度逐一绘制ListView的每一行。(也就是说,如果让getCount()返回1,那么只显示一行。)
4.创建ViewHolder类;方便提取
package com.example.sqiist;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {
    //声明一个listView
    private List<Map<String,Object>> list;
    //声明一个String数组
    private String [] number={"1","2","3","4","5"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    //复写Oncreat方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//绑定布局文件
        list = getDate();//得到数据

        ListView listView = (ListView)findViewById(R.id.myListView); //获取控件
        MyAdapter adapter = new MyAdapter(this);//创建对象
        listView.setAdapter(adapter);//绑定对象

    } 
    //创建getDate方法得到listview里面的数据
    private List<Map<String,Object>> getDate(){
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
        //for循环得到每个数据
        for(int i = 0;i < number.length;i++){
            HashMap<String,Object> map = new HashMap<String,Object>();

            map.put("number", number[i]);//添加到Map里
            list.add(map);//添加到List内
        }
        //返回list
        return list;
    }
    //创建一个自定义MyAdapter继承BaseAdapter
    public class MyAdapter extends BaseAdapter{
        //声明LayoutInflater用来寻找布局文件
        private LayoutInflater mInflater;  
         //构造函数初始化
        public MyAdapter(Context context) {  
            this.mInflater = LayoutInflater.from(context);  
        }  

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();//得到ListView长度
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            ViewHolder holder = null;//创建对象
            if(arg1==null){
                holder=new ViewHolder();//创建对象
                arg1 = mInflater.inflate(R.layout.activity_main, null); //找到布局文件 
                holder.myTextView = (TextView)findViewById(R.id.myTextView);//获取TextView控件
                holder.myButton = (Button)findViewById(R.id.myButton);//获取Button控件
                arg1.setTag(holder);               
            }else{
                holder = (ViewHolder)arg1.getTag();  
            }
            holder.myTextView.setText((String)list.get(arg0).get("number"));//赋值
            //给Button创建监听事件,不做工
            holder.myButton.setTag(arg0);
            holder.myButton.setText("点击");
            holder.myButton.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub

                }

            });
            return arg1;
        }

    }
    public final class ViewHolder{
        public TextView myTextView;
        public Button myButton;
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值