ListView之BaseAdapter

三种Adapter构建ListView

                ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法
                        BaseAdapter: 定义一个类继承BaseAdapter, 重写4个抽象方法, ListView的条目是由getView()方法构建出来的
                        SimpleAdapter: 创建SimpleAdapter对象时, 传入数据(List<Map<String, ?>>), 并指定数据的绑定关系
                        SimpleCursorAdapter: 创建SimpleCursorAdapter对象时, 传入一个Cursor, 指定数据的绑定关系

        监听ListView的点击
                调用ListView.setOnItemClickListener(OnItemClickListener)方法注册一个OnItemClickListener
                在OnItemClickListener的onItemClick()方法中使用 parent.getItemAtPosition(position) 方法可以获取指定条目上的数据
                        BaseAdapter: 返回的就是自定义的getItem()方法中返回的数据
                        SimpleAdapter: 返回的是一个Map, 就是创建SimpleAdapter时List中的一个Map
                        SimpleCursorAdapter: 返回的是一个Cursor, 这个Cursor就是创建时传入的Cursor, 但是已经通过moveToPosition()方法指定到点击的索引了

3.通俗的说,数据适配器就是填充ListView的方式。
---------------------------------------------------
布局文件

```java

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />

</RelativeLayout>

```


javabean------------------------------------------------------

```java

package com.example.a030202_baseadapter;

public class Student {
        private String name;
        private Integer age;
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public Integer getAge() {
                return age;
        }
        public Student(String name, Integer age) {
                super();
                this.name = name;
                this.age = age;
        }
        public void setAge(Integer age) {
                this.age = age;
        }
}

```



java代码----------------------------------------------------------

```java

package com.example.a030202_baseadapter;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

        // 存放Student对象的集合,Student是一个javabean
        private List<Student> list;
        private ListView lv;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                // 一创建Activity就进行初始化
                init();
        }

        // 初始化的方法
        public void init() {
                // 获得ListView
                lv = (ListView) findViewById(R.id.listview);
                // 想list中添加一些数据
                list = new ArrayList<Student>();
                for (int i = 0; i < 13; i++) {
                        list.add(new Student("lisi" + i, 33 + i));
                }
                // 为ListView设置数据适配器
                lv.setAdapter(new MyAdapter());
        }

        // 自定义数据适配器,继承BaseAdapter类
        class MyAdapter extends BaseAdapter {

                // 重写未实现的方法
                // 一个只能存放一个学生信息的布局文件,可复用该布局文件
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        /*
                         * int position,当前到哪个记录了,下标从0开始.向item布局文件中填写的那个数据 View
                         * convertView,可以理解为一个缓存
                         * ,当ListView显示的数据满屏后,如果想通过上下滚动方式再显示数据,就需要用到该convertView
                         * ,可以理解为一个缓存,用于暂时存放数据 ViewGroup parent,该View的父类
                         */
                        View view = null;
                        Student stu = list.get(position);
                        // 缓存为0,表示屏幕中的item还没有填充满
                        if (convertView == null) {
                                // 如果没有填充满,那么就直接调用下面的方法,该方法可以把一个布局文件转为一个View对象
                                view = getLayoutInflater().inflate(R.layout.item, null);
                        } else {
                                // 如果屏幕中已经填充满了,还想要继续显示没有显示出来的数据,也就是上下滚动的时候,就需要用到缓存,将缓存赋值给view。
                                view = convertView;
                        }
                        // 获得view下的两个TextView,并对其进行设值
                        TextView tv_name = (TextView) view.findViewById(R.id.name);
                        TextView tv_age = (TextView) view.findViewById(R.id.age);
                        tv_name.setText(stu.getName());
                        tv_age.setText(String.valueOf(stu.getAge()));
                        return view;
                }

                // 获得一共有多少记录
                @Override
                public int getCount() {
                        // TODO Auto-generated method stub
                        return list.size();
                }

                @Override
                public Object getItem(int position) {
                        // TODO Auto-generated method stub
                        return null;
                }

                @Override
                public long getItemId(int position) {
                        // TODO Auto-generated method stub
                        return 0;
                }

        }
}

```[/mw_shl_code]

本文由上海it培训机构推荐阅读,更多精彩请浏览上海java培训官网。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值