zoukankan      html  css  js  c++  java
  • android Baseadapter 和 ViewHolder的使用

    昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记

    说到baseadapter大家一定都不陌生,下面这张图就展示了数据、listview、baseadapter

    之间的关系。我们可以看出baseadapter是用来将不同数据,经过转化使其成为listview能够显示的格式

    ,再提供给listview展示的数据适配器(listview对展示的数据是有要求的)

    t2A9A

    想要更详细的了解baseadapter请自行百度吧。

    下面就用一个例子描述下baseadapter的具体用法

    我们可以创建一个MyAdapter 继承BaseAdapter

    实现其四个基本方法:

     // 获取数据量
        @Override
        public int getCount() {
            return null;
        }
    
        // 获取对应ID项对应的Item
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        // 获取对应项ID
        @Override
        public long getItemId(int position) {
            return null;
        }
    

     以上三个方法比较简单,功能明确,也有注释

    下面介绍getview方法:

     @Override
        public View getView(int position, View convertView, ViewGroup parent) {}
    

    用于获取每一个item的显示内容

    参数一:position 是指当前dataset的位置,通过getCount和getItem来使用。

    参数二:conertView 是指可以重用的视图,即刚刚出队的视图。

    参数三:parent应该就是list。

    看的云里雾里是不是?!这就对了不如直接上手试试

    public class MyAdapter extends BaseAdapter {
    
        private LayoutInflater mLayoutInflater;
        // 映射数据
        private List<ItemBean> mDataList;
        private long mSumTime;
    
        public MyAdapter(Context context, List<ItemBean> list) {
            mLayoutInflater = LayoutInflater.from(context);
            mDataList = list;
        }
    
        // 获取数据量
        @Override
        public int getCount() {
            return mDataList.size();
        }
    
        // 获取对应ID项对应的Item
        @Override
        public Object getItem(int position) {
            return mDataList.get(position);
        }
    
        // 获取对应项ID
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            // 文艺式 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
             //获取纳秒时间 更加精确
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
             //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null
                convertView = mLayoutInflater.inflate(R.layout.tasklistitem, null);
                holder.title = (TextView) convertView.findViewById(R.id.task_title);
                holder.explain = (TextView) convertView.findViewById(R.id.task_explain);
                holder.price = (TextView) convertView.findViewById(R.id.task_price);
                holder.faraway = (TextView) convertView.findViewById(R.id.task_distance);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            // 取出bean对象
            ItemBean bean = mDataList.get(position);
            // 设置控件的数据
            holder.title.setText(bean.itemTitle);
            holder.explain.setText(bean.itemContent);
            holder.price.setText(bean.itemPrice);
            holder.faraway.setText(bean.itemFaraway);
            // 输出每次getView消耗的时间和
            Log.d("xys", String.valueOf(mSumTime));
            return convertView;
            // 文艺式 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>16325820
        }
    
        // ViewHolder用于缓存控件
        class ViewHolder{
            public TextView title;//标题
            public TextView explain;//说明
            public TextView price;//价格
            public TextView faraway;//距离
        }
    }

     创建完了MyAdapter

    在layout下添加一个布局文件(如果是自己新创建的app测试一下的话可以main.xml)

    名字随意这里就叫  

    list.xml 了

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" android:background="#f0f0f0">
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
    
        <ListView
            android:id="@+id/xListView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:cacheColorHint="#00000000">
    
        </ListView>
    
    
    </LinearLayout>

    创建ItemBean.java

    public class ItemBean {
    
        public int itemImageResid;
        public String itemTitle;
        public String itemContent;
    
        public ItemBean(int itemImageResid, String itemTitle, String itemContent) {
            this.itemImageResid = itemImageResid;
            this.itemTitle = itemTitle;
            this.itemContent = itemContent;
        }
    }

    为list创建对应的java文件

    在onCreat方法中插入如下代码

     //绑定数据
    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.mipmap.ic_launcher, "我是标题" + i, "我是内容" + i)); } // 设置适配器 listView.setAdapter(new MyAdapter(this, dataList));

    完成上面的操作就可以去看看运行效果了(如果不是新创建的app还要先到androidMainfest中注册下新页面)

  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/wobeinianqing/p/5054385.html
Copyright © 2011-2022 走看看