zoukankan      html  css  js  c++  java
  • Android BaseAdapter的使用

    数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter。

    首先说一下什么是适配器,这里我从网上找到一幅图片

    由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁。由它把数据绑定到ListView控件上。

    具体怎么绑定呢,今天就来记录一下。首先我们先看一下效果图。

    这是我写的一个简单的图片、标题、内容布局。关于ListView 我还想说明一点,就是它的缓存机制。它把所有当前页面不显示的内容都放到缓存里,当页面往上滑动时,超出屏幕的部分也会放到缓存里,新显示的部分会直接从缓存里面取。

    1、首先新建一个Android.XML文件,用来显示ListView每一行将要显示样式。

    <?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" >
    
        <ImageView
            android:id="@+id/item_img"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/ic_launcher" />
    
        <TextView
            android:id="@+id/item_title"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/item_img"
            android:text="标题" 
            android:textSize="25sp"
            android:gravity="center_horizontal"
            />
    
        <TextView
            android:id="@+id/item_content"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_toRightOf="@+id/item_img"
            android:layout_below="@+id/item_title"
            android:layout_alignParentRight="true"
            android:text="内容"
            android:textSize="15sp"
            android:gravity="center_vertical"
            />
    
    </RelativeLayout>
    View Code

    2、定义一个Bean对象,用来存放ListView每一行将要显示的数据

    package com.example.baseadapter;
    
    public class ItemBean {
    
        public int itemImgResid;
        public String itemTitle;
        public String itemContent;
        
        public ItemBean(int itemImgResid,String itemTitle,String itemContent) {
            
            this.itemImgResid = itemImgResid;
            this.itemTitle = itemTitle;
            this.itemContent = itemContent;
        }
    }
    View Code

    3、自定义Adapter 并继承BaseAdapter 并重写里面的4个方法。

    其中第四个最重要,就是获取每个Item将要显示的内容。

    package com.example.baseadapter;
    
    import java.util.List;
    
    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;
    
    public class MyAdapter extends BaseAdapter {
        
        private List<ItemBean> listDate;
        private LayoutInflater mLayoutInflater;
        
        public MyAdapter(Context context,List<ItemBean> listBean) {
            mLayoutInflater = LayoutInflater.from(context);
            this.listDate = listBean;
        }
        
        
        @Override   //获取数据集中的数据个数
        public int getCount() {
            // TODO Auto-generated method stub
            return listDate.size();
        }
    
        @Override   //获取数据集中制定索引对应的数据项
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return listDate.get(position);
        }
    
        @Override    //获取指定行对应ID
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override    //获取每一个Item的显示内容
        public View getView(int position, View convertView, ViewGroup parent) {
    
            ViewHolder viewHolder = null;
            if(convertView == null)
            {
                viewHolder = new ViewHolder();
                convertView = mLayoutInflater.inflate(R.layout.itemlist, null);
                //实例化控件
                viewHolder.img = (ImageView) convertView.findViewById(R.id.item_img);
                viewHolder.textTitle = (TextView) convertView.findViewById(R.id.item_title);
                viewHolder.textContent = (TextView) convertView.findViewById(R.id.item_content);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder) convertView.getTag();
            }
            
            //抽取bean对象
            ItemBean bean = listDate.get(position);
            //设置控件数据
            viewHolder.img.setImageResource(bean.itemImgResid);
            viewHolder.textTitle.setText(bean.itemTitle);
            viewHolder.textContent.setText(bean.itemContent);
            return convertView;    
    
        }
        
        //ViewHolder用于缓存
        class ViewHolder{
            public ImageView img;
            public TextView textTitle;
            public TextView textContent;
        }
    }
    View Code

    做到这里基本上就结束了。在主页面我们直接调用就好了。还有一些细节的代码,就没粘出来了。应该不影响大家的理解。

    package com.imooc.baseadaptertest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ListView listView = (ListView) findViewById(R.id.lv_main);
            List<ItemBean> dataList = new ArrayList<>();
            // 创建假数据
            for (int i = 0; i < 20; i++) {
                dataList.add(new ItemBean(
                     R.drawable.ic_launcher,
                        "我是更多<<<<<<"+i,
                        "我是内容,我的字数比较多"+i
                        ));    
            }
            // 设置适配器
            listView.setAdapter(new MyAdapter(this, dataList));
        }
    }
    View Code
  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/Jett/p/4425859.html
Copyright © 2011-2022 走看看