码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-06-09 21:56:17      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:android   万能的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上的处理将会越来越简单清晰。

最后

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

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

标签:android   万能的adapter   

原文地址:http://blog.csdn.net/jflex/article/details/46432127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!