Android之旅第四站——适配ArrayAdapter,simpleadapter和自定义adapter的区别…

来源:互联网 发布:c#怎么读取串口数据 编辑:程序博客网 时间:2024/06/05 03:48

1.ArrayAdapter

只可以简单的显示一行文本

adapter=new ArrayAdapter(this, R.layout.item_main_lv, R.id.item_main_lv_name, datas);

这里写图片描述

2.SimpleAdapter

可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在Java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。

这里写图片描述

3.自定义Adapter

可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。

自定义adapter:

package com.example.zdyadapter;import java.util.List;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class Zdyadapter extends BaseAdapter {    private MainActivity main;    private List<JBean> datas;    public Zdyadapter(MainActivity main, List<JBean> datas) {        super();        this.main = main;        this.datas = datas;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return datas.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return datas.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        View v = null;        ViewHolder vh = null;        JBean jb = datas.get(position);        if (convertView == null) {            vh = new ViewHolder();            v = main.getLayoutInflater().inflate(R.layout.item, null);            vh.tv = (TextView) v.findViewById(R.id.main_tv);            vh.tv1 = (TextView) v.findViewById(R.id.main_tv1);            vh.iv = (ImageView) v.findViewById(R.id.mian_iv);            v.setTag(vh);        } else {            v = convertView;            vh = (ViewHolder) v.getTag();        }        vh.tv.setText(jb.getXuhao());        vh.tv1.setText(jb.getName());        vh.iv.setImageResource(jb.getIv());        return v;    }    private static class ViewHolder {        public TextView tv, tv1;        public ImageView iv;    }}

Mainactivity:

package com.example.zdyadapter;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;public class MainActivity extends Activity {    private ListView lv;    private List<JBean> datas;    private Zdyadapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        initViews();    }    private void initViews() {        // TODO Auto-generated method stub        lv = (ListView) findViewById(R.id.main_lv);        adapter = new Zdyadapter(this, datas);        lv.setAdapter(adapter);    }    private void initDatas() {        // TODO Auto-generated method stub        datas = new ArrayList<JBean>();        datas.add(new JBean("1", "剪刀", R.drawable.a));        datas.add(new JBean("2", "八叉", R.drawable.b));        datas.add(new JBean("3", "问号", R.drawable.c));        datas.add(new JBean("4", "与", R.drawable.d));    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }}
0 0