文档章节

Android SimpleAdapter

sky-flutter
 sky-flutter
发布于 2017/04/24 22:07
字数 529
阅读 234
收藏 7

HolderAdapter背景

Android的AdapterView用的比较多,ListView,GridView,Spinner等,原生的BaseAdapter对ViewHolder没有支持,每次都要,定义内部类,inflater根布局,对item内部view设置clicklistener并转发到adapter的调用者等。写的次数多了感觉很繁琐,于是写了个简单的封装,简化Adapter的编写,仓库连接http://git.oschina.net/phodev/SimpleAdapter.

主要文件介绍

1,CommonAdapter.java从BaseAdapter继承,添加了常用的函数,通过泛型约定了List数据源,代替子类实现getCount功能,添加bindClick实现Adapter的OnItemClickListener。

2,BaseViewHolder.java和HolderAdapter结合,实现类似Activity的view初始化方方式onCreate->setContentView->findViewById。

3,HolderAdapter.java从CommonAdapter继承,主要用来驱动BaseViewHolder工作。

使用方法

1,Adapter定义

public class SampleHolderAdapter extends HolderAdapter<Object> {
    //定义Item内部的点击事件,如果不需要可以不定义
    public static final int CLICK_ACTION_ADD = 1;
    public static final int CLICK_ACTION_UPDATE = 2;
    public static final int CLICK_ACTION_DELETE = 3;
    //构造函数配置数据源(可选,或者之后通过setData更新)
    public SampleHolderAdapter(List<Object> data) {
        super(data);
    }

    @Override
    public BaseViewHolder<?> createViewHolder(int position) {
        //创建期望的 ViewHolder
        return new ViewHolder();
    }
    
    class ViewHolder extends BaseViewHolder<Object> {
        Button btn1, btn2, btn3;

        @Override
        protected void onCreate(Context context, ViewGroup parent) {
            //ViewHolder创建后onCreate会被执行1次
            setContentView(R.layout.item_test);//setContent支持View或者layout id
            btn1 = (Button) findViewById(R.id.btn1);//findViewById
            btn2 = (Button) findViewById(R.id.btn2);
            btn3 = (Button) findViewById(R.id.btn3);
        }

        @Override
        protected void onDataChanged(int position, Object data) {
            //adapter getView的时候onDataChanged会被执行一次
            btn1.setText("add " + position);
            btn2.setText("update " + position);
            btn3.setText("delete " + position);
            //
            bindClick(btn1, position, CLICK_ACTION_ADD);//绑定ItemClick,每次都需bind
            bindClick(btn2, position, CLICK_ACTION_UPDATE);
            bindClick(btn3, position, CLICK_ACTION_DELETE);
        }
    }

}

2,Adapter使用

//数据源    
 private final ArrayList<Object> mData = new ArrayList<>();
 //创建Adapter并绑定数据源
 private final SampleHolderAdapter mAdapter = new SampleHolderAdapter(mData);

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     mListView = (ListView) findViewById(R.id.listview);
     //绑定Adapter
     mListView.setAdapter(mAdapter);
     //设置click listener(由于CommonAdapter支持,并通过bindClick声明)
     mAdapter.setOnItemClickListener(onItemClickListener);
 }

 //ClickListener实现
 private OnItemClickListener onItemClickListener = new OnItemClickListener() {
     @Override
     public void onItemClick(CommonAdapter<?> adapter, View v, int position, int action) {
         switch (action) {//action就是我们SampleHolderAdapte中定义并且bindClick的value
             case SampleHolderAdapter.CLICK_ACTION_ADD:
                 toast(getContext(), position + " add click");
                 break;
             case SampleHolderAdapter.CLICK_ACTION_UPDATE:
                 toast(getContext(),position + " update click");
                 break;
             case SampleHolderAdapter.CLICK_ACTION_DELETE:
                 toast(getContext(), position + " delete click");
                 break;
         }
     }
 };

到此定义和使用的代码完毕。

© 著作权归作者所有

共有 人打赏支持
sky-flutter
粉丝 15
博文 8
码字总数 2175
作品 1
南京
程序员
私信 提问
实现DridView的菜单样式

Jeff Lee blog: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks 今天我们来Android UI第二讲:实现DridView的菜单样式 下载链接: http://fil......

泥沙砖瓦浆木匠
2014/11/18
0
0
ListView实现论坛管理效果(附源碼)

在 android 系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListActivity ,然後用Adapter来显示布局...

长平狐
2012/08/21
148
1
ListView实现论坛管理效果(附源碼)

在 android 系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListActivity ,然後用Adapter来显示布局...

长平狐
2012/08/14
140
0
ListView实现论坛管理效果(附源碼)

在 android 系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListActivity ,然後用Adapter来显示布局...

长平狐
2012/08/09
2.5K
2
android手机应用程序操作手机通讯录的联系人

界面配置文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layoutwidth="fillparent" android:layoutheight="fillp......

Git_Android
2013/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot2.x配置Cors跨域

SpringBoot2.x配置Cors跨域 1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,...

水木星辰
19分钟前
1
0
一文搞懂TCP与UDP的区别

**摘要:**计算机网络基础 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有。 引言 网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TC...

Fundebug
21分钟前
2
0
Hanlp1.7版本的新增功能一览

Hanlp1.7版本在去年下半年的时候就随大快的DKH1.6版本同时发布了,截至目前1.7大版本也更新到了1.7.1了。本篇分别就1.7.0和1.7.1中新增的功能做一个简单的汇总介绍。 HanLP 是由一系列模型与...

左手的倒影
28分钟前
1
0
Linux之PAM可动态加载的认证模块

在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等。在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(P...

城市之雾
29分钟前
1
0
程序员接私活那些坑

前言 最近有很多人问我私活怎么样?有什么坑,我之前也是接了几个私活,当然也有稳定的收入。我们也来分享一下。前几天发现了一个帖子很不错,我们来分享一下 注:本文转自 : http://blog.cs...

终端研发部
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部