Android基础 学习之List 和 Adapter

来源:互联网 发布:mac把图标放在桌面 编辑:程序博客网 时间:2024/06/04 20:07

1.基本的ListView
在布局文件添加ListView ,并在java代码中取出:

ListView lv_test =(ListView)findViewById(R.id.lv_test);

创建适配器并绑定

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arrayList);lv_test.setAdapter(adapter);

参数:第一个:this –>上下文context。第二个:系统样式,可自定义 。第三个:数组数据
1.1点击事件

lv_test.setOnClickListener(new OnClickListener() {              @Override            public void onClick(View v) {                // TODO Auto-generated method stub              }        });

2.继承ListActivity
不需要再布局文件添加ListView,直接在Java部分继承

public class MyListViewActivity extends ListActivity {}

创建适配器绑定适配器

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);setListAdapter(adapter);

参数:同上

3.使用SimpleAdapter
可以自定义视图
1)在主布局文件添加ListView并取出

ListView lv_simple_ada = (ListView) findViewById(R.id.lv_simple_ada);

2)建SimpleAdapter
视图(自定义视图)
这里写图片描述

java部分:

SimpleAdapter adapter = new SimpleAdapter(this, getData(),                R.layout.simple_a_listviewrow,                 new String[] {"img", "name", "info"},                 new int[] {R.id.iv_img, R.id.tv_name, R.id.tv_info});

方法说明

android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数:第一个,上下文对象。第二个,具体数据。第三个,自定义视图(item项)。第四个,数据来源。第五个,绑定去向(绑定给谁)。

具体代码如下:

private List<? extends Map<String, ?>> getData() {        Map<String, Object> map;        array = new ArrayList<Map<String, Object>>();               for (int i = 0; i < 3; i++) {            map = new HashMap<String, Object>();            map.put("img", R.drawable.acorn);            map.put("name", "Acorn");            map.put("info", "这是一个有趣的图标");               array.add(map);            map = new HashMap<String, Object>();            map.put("img", R.drawable.gps);            map.put("name", "GPS");            map.put("info", "这是一个有趣的图标");               array.add(map);                 }        return array;    }

最后还需要绑定适配器。

lv_simple_ada.setAdapter(adapter);

4.使用BaseAdapter
添加ListView和创建Item项跟SimpleAdapter一样,主要是适配器不同。
定义BaseAdapter:

BaseAdapter  adapter = new BaseAdapter() {@Override            public View getView(int position, View convertView, ViewGroup parent) {                ViewHolder viewHolder = null;                viewHolder = new ViewHolder();//自定义类对象,用于存放数据,实现优化效果                if (convertView == null) {//此处为了优化,如果第一次加载,则初始化                    LayoutInflater inflater = LayoutInflater                            .from(BaseAdapterActivity.this);//参数:上下文对象context                    convertView = inflater.inflate(R.layout.base_adapter_listrow, parent, false);//参数:第一个,自定义视图(组件将从此获取)                            viewHolder.img = (ImageView) convertView.findViewById(R.id.iv_base_img);                    viewHolder.name = (TextView) convertView.findViewById(R.id.tv_base_name);                    viewHolder.info = (TextView) convertView.findViewById(R.id.tv_base_info);                    convertView.setTag(viewHolder);                } else {//如果非第一次加载则直接加载                    viewHolder = (ViewHolder) convertView.getTag();                }                //------------设置资源------------>>                viewHolder.img.setImageResource(ids[position]);                viewHolder.name.setText(names[position]);                viewHolder.info.setText("这是一个有趣的图标");                return convertView;            }            @Override            public long getItemId(int position) {                return position;            }            @Override            public Object getItem(int position) {                return names[position];            }            @Override            public int getCount() {                return names.length;            }        };    private class ViewHolder {        public ImageView img;        public TextView name;        public TextView info;       }

数据此处用简单的数组来装

String[] names = { "Acorn", "GPS", "Lossless_Decoder", "Minecraft","WinRAR", "YNAB" };int[] ids = { R.drawable.acorn, R.drawable.gps,R.drawable.lossless_decoder, R.drawable.minecraft,R.drawable.winrar, R.drawable.ynab };

最后绑定适配器(此处与前面一样)。

要为Item项的元素添加点击等可以添加监听,如:

viewHolder.img.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {            }        });

写在设置完资源之后。

要为Item项添加点击事件,在ListView上添加监听,如:

ListView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                    Toast toast;                if (toast == null) {                    toast = Toast.makeText(ListViewRowEventActivity.this, "", 0);                }                toast.setText("你点了第" + position + "项");                toast.show();            }        });

示例2:
自定义适配器
主布局文件中添加一个下拉选择控件

<Spinner        android:id="@+id/spinner"        android:layout_width="match_parent"        android:layout_height="wrap_content" />

item项的布局文件,文件名:item_spinner.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="wrap_content"    android:orientation="horizontal" >    <ImageView        android:id="@+id/iv_item"        android:layout_width="50dp"        android:layout_height="50dp"        android:src="@drawable/ic_launcher" />    <TextView        android:id="@+id/tv_item"        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:layout_marginLeft="50dp"        android:gravity="center"        android:text="nihao" /></LinearLayout>

定义一个bean文件,文件名:CountryBean.java

package com.example.customeadapter;public class CountryBean {    private int imageID; //图标id    private String name;     public CountryBean(int imageID, String name) {        super();        this.imageID = imageID;        this.name = name;    }    public int getImageID() {        return imageID;    }    public void setImageID(int imageID) {        this.imageID = imageID;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

活动java代码

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Spinner spinner = (Spinner) findViewById(R.id.spinner);        //添加项        CountryBean china = new CountryBean(R.drawable.ic_launcher, "中国");        CountryBean usa = new CountryBean(R.drawable.ic_launcher, "美国");        CountryBean korea = new CountryBean(R.drawable.ic_launcher, "韩国");        CountryBean japan = new CountryBean(R.drawable.ic_launcher, "日本");        //用数组存放        ArrayList<CountryBean> list = new ArrayList<CountryBean>();        list.add(china);        list.add(usa);        list.add(korea);        list.add(japan);        MyAdapter adapter = new MyAdapter(list, this);//定义并初始化自定义适配器,使用参数专递便于写成外部类        spinner.setAdapter(adapter);//绑定适配器    }    //自定义适配器,继承自BaseAdapter    class MyAdapter extends BaseAdapter {        private ArrayList<CountryBean> list;        private Context context;        public MyAdapter(ArrayList<CountryBean> list, Context context) {            super();            this.list = list;            this.context = context;        }        @Override//得到总长度        public int getCount() {            return list.size();        }        @Override//得到item项        public CountryBean getItem(int position) {            return list.get(position);        }        @Override        public long getItemId(int position) {            return 0;        }        @Override//得到视图        public View getView(int position, View convertView, ViewGroup parent) {            //如果视图不存在,则创建            if (convertView == null) {                convertView = LayoutInflater.from(context).inflate(R.layout.item_spinner, parent, false);//绑定视图和视图组            }            //得到视图中的控件            ImageView iv = (ImageView) convertView.findViewById(R.id.iv_item);            TextView tv = (TextView) convertView.findViewById(R.id.tv_item);            CountryBean countryBean = list.get(position);//得到item项对象            //设置资源            iv.setImageResource(countryBean.getImageID());            tv.setText(countryBean.getName());            return convertView;//返回视图        }    }}
0 0
原创粉丝点击