ListView的用法

来源:互联网 发布:全球宏观经济数据 编辑:程序博客网 时间:2024/05/21 20:30

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");        returndate;    }}

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;    }}
0 0
原创粉丝点击