Adapter(四)—— 自定义适配器

首先先将我们之前的ArrayAdapter和SimpleAdapter总结一下。

ArrayAdapter适用在只是TextView呈现字符串的适配上,SimpleAdapter可以适配多控件。

在数据源方面:ArrayAdapter的数据源是List<String>

                      SimpleAdapter的数据源是List<Map<String,Object>>

 

自定义适配器是我们开发中经常会使用到的适配器对象,它可以将动态变化的数据适配给ListView,并且与ArrayAdapter、SimpleAdapter都继承BaseAdapter,而在自定义适配器中一定需要重写以下四个方法:

int getCount():返回填充的数据项的个数,必须返回真实值。

Object getItem(int position):根据position返回某一项数据。

long getIemId(int position):根据position返回某一行的行ID。

View getView(int position,View convertView,ViewGroup parent):根据position返回某一项的界面View,显示给用户。

 

下面我们来简单通过代码实现来了解一下自定义适配器。

代码实现:

MainActivity.java

 

    private ListView lv;
    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        lv = (ListView) findViewById(R.id.lv);
        //初始化数据源
        list = new ArrayList<String>();
        for (int i = 0; i < 40 ; i++){
            list.add("数据" + i);
        }
    }
//实现自己的适配器
    class MyAdapter extends BaseAdapter{

        @Override
        //计算需要适配的item总数
        public int getCount() {
            return list.size();
        }

        @Override
        //获取每一个item对象
        public String getItem(int position) {
            return list.get(position);
        }

        @Override
        //获取每一个item对象的id
        public long getItemId(int position) {
            return position;
        }

        @Override
        //获取每个item对应的View视图
        public View getView(int position, View convertView, ViewGroup parent) {
            //获取布局映射器对象
            LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
            //将定义好的xml文件转化为View对象
            View  view = inflater.inflate(R.layout.myadapter_item,null);
            //给view对象中的控件进行赋值
            TextView tv = (TextView) view.findViewById(R.id.myadapter_item);
            tv.setText(getItem(position));
            return view;
        }
    }

myadapter_item.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/myadapter_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:padding="8dp"
        android:text="你好"/>

</LinearLayout>

activity_main.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.testmyadapter.MainActivity">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

在自定义适配器重写的四个方法中,尤为重要的是getView()方法,我们需要在其中实现一系列的转化操作。

且这里牵扯到一个之前的了解的概念:布局映射器。

LayoutInflater:布局映射器

通过from方法获取布局映射器对象,然后就可以通过该对象的inflater方法将一个xml文件转化为View对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值