android之适配器

来源:互联网 发布:淘宝后台操作流程视频 编辑:程序博客网 时间:2024/06/05 14:16

在我理解中适配器就是数据跟界面的桥梁。我为什么这么讲。。。
因为接下来写代码中,就是按照几个步骤写就可以了。学完这三个适配器。应该可以熟练掌握了。。哈哈哈。。。。

大致的步骤,就四步。是个人都会写。何况我们还是程序员。哈哈。。

1, 实例化ListView

2, 获取数据

3, 实例化适配器

4, 调用listView中的setAdapter(ListAdapter adapter)方法

我们先开始学习最简单的,ArrayAdapter 适配器

activity_main.xml代码如下

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView        android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="match_parent"></ListView></RelativeLayout>

是不是很简单,只是一个ListView 控件。哈哈。接下来继续写我们的代码。

MainActivit.java代码如下

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView mLv;    private List<String>list=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initWidgets();//初始化控件        initDatas();//初始化数据        //三个参数的意思:1,上下文 2,布局文件 ,3,数据源        //第三步,获取adapter     ArrayAdapter mAdapter=new ArrayAdapter(             MainActivity.this,             android.R.layout.simple_list_item_1,             list     );        //这是第四步 setAdapter()        mLv.setAdapter(mAdapter);    }    //初始化控件    private void initWidgets() {        //这是第一步 。初始化ListView        mLv= (ListView) findViewById(R.id.listView);    }    //初始化数据    private void initDatas(){        //这是第二部。获取数据        for (int i = 0; i <15 ; i++) {            list.add("我不是程序员"+i);        }    }}

看到没,大致是不是四步就搞定,哈哈哈,简单吧,,接下来我们就运行看看效果。。

运行结果

这里写图片描述

学完ArrayAdapter我们只能只是展示文本数据而已,接下来我们就学下有点难度的,可以展示图片。SimpleAdapter适配器,其实也没什么难度,就四步而已。。哈哈哈 接下来就开始吧。

先看下运行效果,嘻嘻。。

这里写图片描述

先把几个简单的布局写出来,一个item_listview.xml布局文件,一个activity_main.xml布局文件

activity_main.xml代码如下。代码跟上面一样,就一个Listview控件。就不放出来了。

item_listview.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="match_parent"    android:orientation="horizontal"    ><ImageView    android:src="@mipmap/ic_launcher"    android:id="@+id/img"    android:layout_width="wrap_content"    android:layout_height="wrap_content" />    <TextView        android:id="@+id/name"        android:textSize="20sp"        android:layout_marginLeft="15dp"        android:layout_marginTop="15dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="我不是程序员"/></LinearLayout>

就一个ImageView,和一个TextView也很简单。。然后我根据item里的内容 定义一个javabean 因为是图片跟文本,就可以这样写

PersonBean.java代码如下:

/** * Created by Administrator on 2016/9/18. */public class PersonBean {    private int idImg;    private String name;    public int getIdImg() {        return idImg;    }    public void setIdImg(int idImg) {        this.idImg = idImg;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

接下来就写我们最主要的代码

MainAcitivity.java代码如下:

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    private ListView mLv;    private List<Map<String,Object>>list=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initWidgets();//初始化控件        initDatas();//获取数据        /*        五个参数的含义:        1,上下文,2,数据源,3,布局文件        4,设置数据时map的键,5,item的各控件的id        这是第三步        */        SimpleAdapter adapter=new SimpleAdapter(                MainActivity.this,                list,                R.layout.item_listview,                new String[]{"imgId","name" },                new int[]{R.id.img,R.id.name}        );        //这是第四步        mLv.setAdapter(adapter);    }    //初始化控件    private void initWidgets() {        //这是第一步 。初始化ListView        mLv= (ListView) findViewById(R.id.listView);    }    //初始化数据    private void initDatas(){        //这是第二部。获取数据        for (int i = 0; i <15 ; i++) {          PersonBean bean=new PersonBean();            bean.setIdImg(R.mipmap.ic_launcher);            bean.setName("我真不是程序员"+i);            Map<String,Object>map=new HashMap<>();            map.put("imgId",bean.getIdImg());            map.put("name",bean.getName());            list.add(map);        }    }}

是不是很简单,哈哈。。。就四步。
上面两个适配器我们平常用的还不是很多,接下来就让我们学习什么叫万能适配器。BaseAdapter适配器。。。哈哈哈。

我们就在第二个基础上改。换成我们自己的Adapter

MyAdapter.java

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;/** * Created by Administrator on 2016/9/18. */public class MyAdapter extends BaseAdapter {    private List<PersonBean> list;    private Context context;    public MyAdapter(List<PersonBean> list, Context context) {        this.list = list;        this.context = context;    }    //item的大小,也就是数据源的大小    @Override    public int getCount() {        return list.size();    }    //PersonBean对象    @Override    public Object getItem(int position) {        return list.get(position);    }    //item位置    @Override    public long getItemId(int position) {        return position;    }    //返回view对象    @Override    public View getView(int position, View convertView, ViewGroup parent) {        View view = null;        ViewHoder holder = null;        if (convertView != null) {            view = convertView;            holder = (ViewHoder) view.getTag();        } else {            //就是把布局文件加载成一个view            view = LayoutInflater.from(context).inflate(R.layout.item_listview, null);            holder = new ViewHoder();            view.setTag(holder);            holder.mImg = (ImageView) view.findViewById(R.id.img);            holder.mTv = (TextView) view.findViewById(R.id.name);        }        holder.mImg.setImageResource(list.get(position).getIdImg());        holder.mTv.setText(list.get(position).getName());        return view;    }}class ViewHoder {    ImageView mImg;    TextView mTv;}

这里我用了ViewHoder模式,只是缓存了mImag和mTv,省的总是执行findviewbyid方法。这样执行效率会高点。以后我们学习recycleView也是用到ViewHoder模式.

MainAcitivity.java代码如下:

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity {    private ListView mLv;    private List<PersonBean>list=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initWidgets();//初始化控件        initDatas();//获取数据        /*        两个参数的含义:        1,数据源 2,上下文        这是第三步        */      MyAdapter adapter=new MyAdapter(list,MainActivity.this);        //这是第四步        mLv.setAdapter(adapter);    }    //初始化控件    private void initWidgets() {        //这是第一步 。初始化ListView        mLv= (ListView) findViewById(R.id.listView);    }    //初始化数据    private void initDatas(){        //这是第二部。获取数据        for (int i = 0; i <15 ; i++) {          PersonBean bean=new PersonBean();            bean.setIdImg(R.mipmap.ic_launcher);            bean.setName("我真不是程序员"+i);            list.add(bean);        }    }}

是不是很简单,也是四步解决。哈哈。其实最主要还是理解重写BaseAdapter几个方法的意思,理解了,就不会太难,其实还是很简单。。哈哈哈哈。。运行效果还是跟第二个一样,就不放出来了。。

总结:

三个适配器我们也学完了,有木有掌握呢,不掌握至少会写吧,哈哈。其实这些代码我写了有十几次遍了。写多了就会写了。我是自学安卓的,加油…..

源码下载

https://github.com/songshuilin/AndroidForBlog/tree/master/adapersimple

1 0
原创粉丝点击