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;
}
}