android之适配器使用

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

1, 实例化ListView

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

1, 实例化ListView

2, 获取数据

3, 实例化适配器

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

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

activity_main.xml代码如下


<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

是不是很简单,只是一个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 Listlist=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);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

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

运行结果

android之适配器使用_第1张图片

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

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

android之适配器使用_第2张图片

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

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

item_listview.xml代码如下:


<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

就一个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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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

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>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);
            Mapmap=new HashMap<>();
            map.put("imgId",bean.getIdImg());
            map.put("name",bean.getName());
            list.add(map);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

是不是很简单,哈哈。。。就四步。 
上面两个适配器我们平常用的还不是很多,接下来就让我们学习什么叫万能适配器。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 list;
    private Context context;

    public MyAdapter(List 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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

这里我用了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 Listlist=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);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

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

总结:

三个适配器我们也学完了,有木有掌握呢,不掌握至少会写吧,哈哈。其实这些代码我写了有十几�%

你可能感兴趣的:(android之适配器使用)