android ListView 学习(1)

来源:互联网 发布:sql 查询合并表语句 编辑:程序博客网 时间:2024/04/29 18:43

今天学习ListView,现在总结一下,让ListView显示自己想要显示的List数据,总结了一下又3步,在这里表示我的API 19,总结了一下,用这张图来显示:


ListView  adapter, 数据,在开发中有3中类型的adapter,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,第三种是simpleAdapter的结合数据库的形式,废话不多述,第一种情况:

ArrayAdapt:

public class MainActivity extends ActionBarActivity {    ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView = new ListView(this);        listView.setAdapter(new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,getData()));        setContentView(listView);    }    private List<String> getData() {        List<String> data = new ArrayList<String>();        data.add("item1");        data.add("item2");        data.add("item3");        data.add("item4");        return data;  
support_simple_spinner_dropdown_item是android提供的,我使用的是api 19,不知道其他的api有没有

分析一下使用的步骤。

1)定义一个数组来存放ListViewitem的内容。

2)通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象。

3)通过ListViewsetAdapter()方法绑定ArrayAdapter

其中第二步有必要说一下的是,ArrayAdapter有多个构造函数,例子中实现的是最常用的一种。第一个参数为上下文,第二个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID。第三个参数为ListView的内容。其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。通常我们使用Android提供的资源。


这是最简单的一种情况,就是将List中的数据进行显示;

因为android提供了adapter,有时候我们需要我们自己提供实现的adapter,BaseAdapter进行操作

public class MainActivity extends Activity {    ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        listView = (ListView)findViewById(R.id.lv);        listView.setAdapter(new MyAdapter(getData(), this));//        listView = new ListView(this);//        listView.setAdapter(new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,getData()));//        setContentView(listView);//        SimpleAdapter simpleAdapter = new SimpleAdapter(this,getData(),R.layout.simple_item,//                new String[]{"title","info","img"},//                new int[]{R.id.title,R.id.info,R.id.img});////        setListAdapter(simpleAdapter);    }    private List<Map<String, Object>> getData() {        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();        Map<String, Object> map = new HashMap<String, Object>();        map.put("title", "G1");        map.put("info", "google 1");        map.put("img", R.drawable.abc_ab_share_pack_holo_light);        list.add(map);        map = new HashMap<String, Object>();        map.put("title", "G2");        map.put("info", "google 2");        map.put("img", R.drawable.abc_ab_share_pack_holo_light);        list.add(map);        map = new HashMap<String, Object>();        map.put("title", "G3");        map.put("info", "google 3");        map.put("img", R.drawable.abc_btn_check_to_on_mtrl_000);        list.add(map);        return list;    }


适配器:

 LayoutInflater mInflater;    private List list;    public MyAdapter(List list,Context context){        this.list = list;        this.mInflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        View item = mInflater.inflate(R.layout.simple_item, null);        ImageView img = (ImageView)item.findViewById(R.id.img);        TextView title = (TextView)item.findViewById(R.id.title);        TextView info = (TextView)item.findViewById(R.id.info);        img.setImageResource(R.drawable.ic_launcher);        title.setText("Hello");        info.setText("world");        return item;    }}

这里仅仅是现实出了一个自定义一个adapter,这样的数据显示很糟糕,数据量大了以后会导致滑动很慢,所以需要进行优化

0 0