Android快速开发之appBase——(2).万能的Adapter

Android快速开发之appBase——(2).万能的Adapter

android的Adapter是常用的一个组件,自定义的adapter基本上都是集成BaseAdapter,然后实现getView等一系列方法。时间长了,难免让人感觉到写的重复性代码过多,那么万能的Adapter讲解放你的双手。

对比

  • BaseAdapter

package com.snicesoft.appbase.demo;

import java.util.ArrayList;
import java.util.List;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListBaseAdapter extends BaseAdapter {
    List<Data> datas = new ArrayList<ListBaseAdapter.Data>();

    public void setDatas(List<Data> datas) {
        this.datas = datas;
        notifyDataSetChanged();
    }

    public class Holder {
        TextView tvTitle;
        ImageView imgIcon;
    }

    public static class Data {
        String title;
        int icon;

        public Data(String title, int icon) {
            super();
            this.title = title;
            this.icon = icon;
        }
    }

    @Override
    public int getCount() {
        return datas.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder;
        if(convertView == null){
            holder = new Holder();
            convertView = View.inflate(parent.getContext(), R.layout.item_listdemo, null);
            holder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            holder.imgIcon = (ImageView) convertView.findViewById(R.id.imgIcon);
            convertView.setTag(holder);
        }else{
            holder = (Holder) convertView.getTag();
        }
        holder.tvTitle.setText(datas.get(position).title);
        holder.imgIcon.setImageResource(datas.get(position).icon);
        return convertView;
    }

}

  • AvAdapter(万能Adapter)

package com.snicesoft.appbase.demo;

import android.content.Context;
import android.widget.ImageView;
import android.widget.TextView;

import com.snicesoft.avlib.annotation.DataBind;
import com.snicesoft.avlib.annotation.DataType;
import com.snicesoft.avlib.annotation.Id;
import com.snicesoft.avlib.annotation.Layout;
import com.snicesoft.avlib.rule.IData;
import com.snicesoft.avlib.rule.IHolder;
import com.snicesoft.avlib.widget.AvAdapter;

@Layout(R.layout.item_listdemo)
public class ListDemoAdapter extends
        AvAdapter<ListDemoAdapter.Holder, ListDemoAdapter.Data> {

    public class Holder extends IHolder {
        @Id(R.id.tvTitle)
        TextView tvTitle;
        @Id(R.id.imgIcon)
        ImageView imgIcon;

        @Override
        public void initViewParams() {

        }
    }

    public static class Data extends IData {
        @DataBind(id = R.id.tvTitle)
        String title;
        @DataBind(id = R.id.imgIcon, dataType = DataType.IMG)
        int icon;

        public Data(String title, int icon) {
            super();
            this.title = title;
            this.icon = icon;
        }

    }

    public ListDemoAdapter(Context context) {
        super(context);
    }

    @Override
    public Holder newHolder() {
        return new Holder();
    }

}

  • 结论:不用再写getView方法以及各种findviewbyid、getcout等方法。只需要掌握holder和data的配置规则就可以轻松使用。

Activity中使用


package com.snicesoft.appbase.demo;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.snicesoft.avlib.annotation.DataBind;
import com.snicesoft.avlib.annotation.DataType;
import com.snicesoft.avlib.annotation.Id;
import com.snicesoft.avlib.annotation.Layout;
import com.snicesoft.avlib.rule.IData;
import com.snicesoft.avlib.rule.IHolder;
import com.snicesoft.base.BaseActivity;

@Layout(R.layout.activity_main)
public class MainActivity extends
        BaseActivity<MainActivity.Holder, MainActivity.Data> {
    public class Holder extends IHolder {
        @Id(R.id.textView1)
        TextView textView1;
        @Id(R.id.button1)
        Button button1;
        @Id(R.id.listView1)
        ListView listView1;

        @Override
        public void initViewParams() {

        }

    }

    public class Data extends IData {
        @DataBind(id = R.id.textView1)
        String tv1 = "我是自动绑定的TextView";
        @DataBind(id = R.id.button1)
        String btn1 = "我是自动绑定的Button";
        @DataBind(id = R.id.listView1, dataType = DataType.ADAPTER)
//      ListBaseAdapter adapter = new ListBaseAdapter();
        ListDemoAdapter adapter = new ListDemoAdapter(MainActivity.this);
    }

    @Override
    public Data newData() {
        return new Data();
    }

    @Override
    public Holder newHolder() {
        return new Holder();
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//      List<ListBaseAdapter.Data> datas = new ArrayList<ListBaseAdapter.Data>();
        List<ListDemoAdapter.Data> datas = new ArrayList<ListDemoAdapter.Data>();
        for (int i = 1; i <= 10; i++) {
//          datas.add(new ListBaseAdapter.Data("标题"+i, R.drawable.ic_launcher));
            datas.add(new ListDemoAdapter.Data("标题"+i, R.drawable.ic_launcher));
        }
        _data.adapter.addAll(datas);
    }
}
  • 被注释的是BaseAdapter

说明

  • ListDemoAdapter是由代码生成器生成:包括layout的xml文件、Holder和Data的主体
  • avlib框架基于注解配置,简化代码,让开发者更加关注其他业务的处理,UI上的处理将会越来越简单清晰。

最后

欢迎大家指点,有好的想法可以提出,我将会不断优化框架。

时间: 2024-08-08 01:27:50

Android快速开发之appBase——(2).万能的Adapter的相关文章

Android快速开发之appBase——(1).appBase介绍

Android快速开发之appBase--(1).appBase介绍 一直想写博客,苦于自己的文笔实在不行,在CSDN潜水了好几年,中间差不多3年没有写过博客.原因有二:1.文笔差:2.没时间. 今年开始,时间充裕了,开始计划练练自己的文笔,也让自己成长起来,希望从中能够提升自己的能力.望大家多多支持和关注!! 导读:appBase是什么? appBase是一个Android app开发的基础集合,目的是任何应用都可以在这个基础之上开发app,省去了搭建框架的时间. appBase=xutils

Android快速开发之appBase——(6).HttpReq和APICloudSDK

Android快速开发之appBase--(6).HttpReq和APICloudSDK HttpReq和APICloudSDK都是网络请求组件,都是基于xUtils的HttpUtils重新封装的.接下来讲一下使用方法. 1.HttpReq 看以看到有这么几个方法 GET:GET方式请求 POST:普通的POST表单提交 POST:将数据以流的形式传递 /** * POST请求,用InputStream的方式传递请求参数 * * @param api * 接口地址 * @param reques

Android快速开发之appBase——实战《购物车》

Android快速开发之appBase--实战<购物车> 最近将appBase实战于各种项目中,也发现了不少问题,并优化了很多功能.今天带给大家一个实战–<购物车>.购物车,在商城app中是必不可少的一部分,也是使用的比较多的,这里简单的做一个效果. 先来看看效果图 1.创建项目 第一种.引用appBase项目即可 第二种.将appBase的jar文件copy到libs下 我用的第二种,如上图所示. 2.代码生成 通过代码生成器生成Activity.Presenter.Adapte

Android快速开发之appBase——(3).详解IHolder和IData

Android快速开发之appBase--(3).详解IHolder和IData IHolder和IData是AVLib的两个组件,在前面已经使用过了,那么这一篇将会详细说明这两个组件的用法. IHolder IHolder是AVLib中View自动绑定的组件规范,所有@Id使用只能存在IHolder派生的类中. 源码 package com.snicesoft.avlib.rule; /** * @author zhe * @since 2015年4月15日 上午9:54:17 * @vers

Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity

Android快速开发之appBase--(4).详解com.snicesoft.Application和BaseActivity 在Android快速开发之appBase--(1).appBase介绍中使用过com.snicesoft.Application和BaseActivity,本篇则解开她们的面纱. 1. com.snicesoft.Application 1) 源码分析 package com.snicesoft; import java.util.ArrayList; import

Android快速开发之appBase——(5).BasePresenter的使用

Android快速开发之appBase--(5).BasePresenter的使用 Presenter是来自MVP中的概念,是用来处理与用户交互的逻辑.在这里更加简单化,Presenter中的方法是根据业务来定义,比如获取消息列表,那么业务常常会这样:先去请求网络,网络正常请求到数据返回并展示在UI层,网络错误没有拿到数据,看看缓存中有没有,然后从缓存中拿到数据并返回并展示在UI层:突然,有一天业务需求发生变化,只允许获取网络,网络错误UI上显示没有消息.如果之前在UI层已经做过数据为空的处理,

Android Studio快速开发之道

概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Postfix completion 介绍 Postfix completion 是IntelliJ IDEA很早就有的功能,该功能基于已经输入的表达式和你添加的后缀来实现另一个你想要的表达式.例如在布尔表达式之后加上后缀if就是if语句 . 常用后缀介绍 下面介绍一下个人工作中觉得比较常用的几个后缀

Android 异步开发之 AsyncQueryHandler

AsyncQueryHandler: 官方解释是一个异步帮助类(A helper class to help make handling asynchronous ContentResolver queries easier.) .这个类的主要作用就是异步对DB数据库进行操作,加快其数据处理的速度(这个非常重要,特别是大容量的数据处理时,例如几千联系人的数据读取,按正常的处理速度会非常的慢,使用AsyncQueryHandler,这就会大大的加快速度,增加用户的良好体验). AsyncQuery

Android 安全开发之 ZIP 文件目录遍历

1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件.如果被覆盖掉的文件是动态链接so.dex或者odex文件,轻则产生本地拒绝服务漏洞,影响应用的可用性,重则可能造成任意代码执行漏洞,危害用户的设备安全和信息安全.比如近段时间发现的"寄生兽"漏洞.海豚浏览器远程命令执行漏洞.三星默认输入法远程代码执行漏洞等都与ZIP文件目录遍历有