android之适配器

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

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

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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值