AdapterView

来源:互联网 发布:软件测试工程师教程 编辑:程序博客网 时间:2024/05/18 04:56

1、AdapterView

    View - 控件 - 用于批量显示数据。

    Adapter - 适配器 - 将数据转换之后,提供给View显示。

2、ListView - 最简单的AdapterView

    listView在布局中的id命名 

    - 标准的控件操作方式,定义android:id="@+id/listView",获取findViewById(R.id.listView)。

    - 定义android:id="@android:id/list",act不能继承Activity了,而要继承ListActivity,然后获取this.getListView()。

3、ArrayAdapter - 最简单的Adapter,只能显示文本,不能显示图片等等。

    ArrayAdapter<string> adapter = new ArrayAdapter<string> (this, android.R.layout.simple_list_item_1, dataArray) 

    - 参数:(1)当前act;(2)布局文件,使用系统自带资源包R,simple_list_item_1只有一个textView;(3)数据源,数组的数据类型是string,在act中赋好值。

4、View和Adapter关联起来,并设置响应事件:

    设置Adapter - listView.setAdapter(adapter)

    设置触摸响应 - listView.setOnItemClickListener

5、SimpleAdapter - 可以显示图片和文本的Adapter

    - 不能直接使用系统自带的布局文件,要自己写一个xml文件,定义好每个Item中要显示的Image和Text。

    - act中准备数据源的数组:

        private ArrayList<Map<String,Object>> dataArray;  // 数据源数组

        private Map<String,Object> map; // 每个Item的数据。注意:使用SimpleAdapter,Item数据只能是Map键值对!这事SimpleAdapter的限制。

        dataArray=new ArrayList<Map<String,Object>>();

        map=new HashMap<String,Object>();

        map.put("img",R.drawable.image1); // 初始化第一个Item的图片资源

        map.put("text",R.drawable.text1); // 初始化第一个Item的文本资源

        dataArray.add(map); // 存入数组

        // 重复上述操作,存入后续Item的资源

    - 准备Adapter:

        SimpleAdapter adapter=new SimpleAdapter(this, dataArray, R.layout.item, new String[]{"img","text"}, new int[]{R.id.imgView, R.id.textView});

        -参数:(1)上下文对象(2)数据源(3)每个Item的布局文件(4)要显示的资源,来自map中的key数组(5)把资源显示到哪个控件中,与前一个参数的顺序保持一致。

    - 设置adapter,将listView和Adapter关联起来:

        listView.setAdapter(adapter);

    - 设置触摸响应:

        listView.setOnItemClickListener{

            onItemClickListener{

                dataArray.remove(position); // 删除一个数据

                adapter.notifyDataSetChanged(); // 刷新Adapter,才能显示出来。

            }

        }

6、自定义Adapter

    主要流程和SimpleAdapter一样:写xml,准备数据源,准备Adapter,将listView和Adapter关联起来,设置触摸响应。

    主要区别如下:

    - 自定义Adapter,要继承BaseAdapter类,实现构造函数和4个方法。

    public class MyAdapter extends BaseAdapter{

        private Context myContext;

        ArrayList<Music> myDataArray; // Music类,在后面有定义; 可以自定义数据类型,而不必局限于Map键值对,这是自定义Adapter的优势。

        public MyAdapter(Context context, ArrayList<Music> dataArray){

            myContext = context;

            myDataArray = dataArray;

        }

        public int getCount(){

            return myDataArray.size();

        }

        public Object getItem(int position){

            return myDataArray.get(position); // 每生成一个Item都会调用一次

        }

        public long getItemId(int position){

            return position;

        }

        public View getView(int position, View convertView, ViewGroup parent){

            // 每生成一个Item都会调用一次。 将xml布局文件转换为View。

            LayoutInflater inflater = LayoutInflater.from(myContext,);

            View view = inflater.inflate(R.layout.item, null);

            

            ImageView imgView = view.findViewById(R.id.imgView);

            TextView textView = view.findViewById(R.id.textView);

            imgView.setBackgroundResource( myDataArray.get(position).getImg() ); // 获取Item资源,myDataArray中保存着Music对象。

            textView.setText( myDataArray.get(position).getName() );

            return view;

        }

    }

    // ---------------------------------

    public class Music {

        private String name;

        private int img; // 图片资源

        public String getName(){

            return name;

        }

        public int getImg(){

            return img;

        }

        public void setImg(int img){

            this.img = img;

        }

    }


    - 准备数据源:

    Music music = new Music();

    music.setName("图片a");

    music.setImg(R.drawable.a);  // 设置图片资源的方法,R.drawable.a就是个数值。

    dataArray.add(music); // 将music对象放入资源数组即可。


    - 在act中准备Adapter:

    adapter = new MyAdapter(this, dataArray); // 数据源通过构造函数传给Adapter。


0 0
原创粉丝点击