• Stars
    star
    107
  • Rank 323,587 (Top 7 %)
  • Language
    Java
  • License
    MIT License
  • Created about 9 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

通用的ListView、RecyclerView的Adapter

Android Common Adapter

该库用于简化AbsListView类型与RecyclerView的Adapter构建,在ListViewAdapter和RecyclerAdapter封装了固定的业务逻辑,使得用户只需要实现变化的部分即可,简化代码,避免重复的模板代码。

该库的接口参考了base-adapter-helper,在此基础上添加了RecyclerView Adapter的支持。两种类型的Adapter之间通过桥接模式简化代码,参考ViewHolderImpl

添加Gradle依赖

在项目的build.gradle中添加上如下依赖:

dependencies {
    // 其他依赖

	// Common Adapter的依赖
    compile 'org.simple:adapter:1.0.1'
}

1、使用代码

    /**
     * 初始化ListView
     */
    private void initListView() {
        ListView listView = (ListView) findViewById(R.id.listview);
        final ListViewAdapter<String> adapter = new ListViewAdapter<String>(R.layout.list_item_type_1) {
            @Override
            protected void onBindData(GodViewHolder viewHolder, int position, String item) {

                viewHolder
                        .setText(R.id.textview, item)             // 设置文本内容
                        .setImageResource(R.id.imageview, R.drawable.big_smile) ; // 设置图片资源
            }
        };
        // 添加数据
        adapter.addItems(mockDatas());
        listView.setAdapter(adapter);
        // 设置ListView的点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "Click List : " + adapter.getItem(position), Toast.LENGTH_SHORT).show();
            }
        });
    }

针对于AbsListView类族的组件需要使用ListViewAdapter类型的Adapter,泛型参数就是单个实体类的数据类型。在构造ListViewAdapter对象时覆写onBindData函数完成数据的绑定即可。GodViewHolder中包含了各类View属性的设置,具体请直接查看GodViewHolder中的setter函数。

对于RecyclerView则需要使用RecyclerAdapter,使用方式与ListViewAdapter类似,示例代码如下所示。

    /**
     * 初始化RecyclerView
     */
    private void initRecyclerView() {
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        // 线性
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

        // 初始化adapter
        final RecyclerAdapter<String> adapter = new RecyclerAdapter<String>(R.layout.list_item_type_1, mockDatas()) {
            @Override
            protected void onBindData(RecyclerViewHolder viewHolder, int position, String item) {
                viewHolder.setText(R.id.textview, item);
                ImageView imageView = viewHolder.findViewById(R.id.imageview);
                Glide
                        .with(viewHolder.getContext())
                        .load("http://img4.duitang.com/uploads/blog/201402/19/20140219232639_Cda2j.thumb.600_0.jpeg")
                        .into(imageView);
            }

            // 如果有多个布局,那么覆写getItemViewType与getItemLayout即可
            @Override
            public int getItemViewType(int position) {
                return position % 5 == 0 ? 2 : 1;
            }

            @Override
            protected int getItemLayout(int type) {
                if (type == 2) {
                    return R.layout.list_item_type_2;
                }
                return R.layout.list_item_type_1;
            }
        };

        // 设置RecyclerView的点击事件
        adapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this, "Click Recycler : "
                        + adapter.getItem(position), Toast.LENGTH_SHORT).show();
            }
        });
        recyclerView.setAdapter(adapter);
    }

在使用Common Adapter时不需要担心数据源发生改变导致列表数据不更新的问题,因为Adapter基类中将数据集设置为final,所有的数据都会添加到该数据集中;在增加、减少数据时也不需要调用notifyDataSetChanged,只需要调用Adapter对应的的addItem或者remove函数即可。

2、效果

More Repositories

1

awesome-english-ebooks

经济学人(含音频)、纽约客、卫报、连线、大西洋月刊等英语杂志免费下载,支持epub、mobi、pdf格式, 每周更新
CSS
20,476
star
2

android-tech-frontier

【停止维护】一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目
10,443
star
3

the-economist-ebooks

经济学人(含音频)、纽约客、自然、新科学人、卫报、科学美国人、连线、大西洋月刊、国家地理等英语杂志免费下载、订阅(kindle推送),支持epub、mobi、pdf格式, 每周更新. The Economist 、The New Yorker 、Nature、The Atlantic 、New Scientist、The Guardian、Scientific American、Wired magazines, free download and subscription for kindle, mobi、epub、pdf format.
CSS
8,890
star
4

AndroidEventBus

A lightweight eventbus library for android, simplifies communication between Activities, Fragments, Threads, Services, etc.
Java
1,611
star
5

Colorful

基于Theme的Android动态换肤库,无需重启Activity、无需自定义View,方便的实现日间、夜间模式。
Java
1,398
star
6

iOS-tech-frontier

一个定期翻译国外iOS优质的技术、开源库、软件架构设计、测试等文章的开源项目
1,202
star
7

mockito-doc-zh

Mockito框架中文文档
1,113
star
8

android_my_pull_refresh_view

android下拉刷新实现原理【阐述基本原理,不建议使用】
Java
275
star
9

mmat

An automatically testing and analysis hprof library for android app (自动分析Android内存泄漏)
Java
178
star
10

simple_net_framework

SimpleNet网络框架,仅供学习参考,不推荐使用,不进行维护。
Java
139
star
11

android_dp_analysis_code

《Android 源码设计模式解析与实战》示例代码
Java
130
star
12

the-tech-frontier-app

The Android App for Tech Frontier
Java
121
star
13

simple_imageloader

A Simple ImageLoader for Android 【不建议使用到项目中,仅作示例】
Java
120
star
14

app-test-arch

Android 单元测试、Monkey、LeakCanary测试demo项目【粗略示例】
Java
98
star
15

android_jtm_sourcecode

Java
85
star
16

SimpleTvIME

简单的Android Tv远程遥控器 & 输入法 【不进行维护】
Java
79
star
17

dp-issues

Android源码设计模式解析与实战勘误
70
star
18

Chris-Android-PullToRefresh

在Chris Banes的Android-PullToRefresh的基础上增加了RecyclerView的支持与Demo
Java
56
star
19

ripplelayout

RippleLayout library
Java
50
star
20

the-hot-tech-blogs

每周六会从掘金抓取7天内最热门Android、iOS、后端、前端各20篇技术文章, 然后制作成 mobi、epub 格式的电子书推送给订阅者, 支持推送到kindle 设备、kindle手机app、普通邮箱.
42
star
21

SegmentView

This is a Android Segment Control ( View ) like iOS, support 2.3 and above.
Java
39
star
22

materiallayout

materiallayout library and demo.
Java
34
star
23

listview_nested_gridview

ListView嵌套GridView的消息流页面,解决了GridView高度和宽度问题
Java
32
star
24

jtm-techfrontier-app

Java
31
star
25

CrashCanary

Crash Log Viewer
Java
30
star
26

leakcanary-for-eclipse

用于eclipse的leakcanary
Java
30
star
27

AndroidShakeLib

Android 摇一摇手机功能
Java
23
star
28

android-jtm-issues

《Android开发进阶-从小工到专家》勘误
23
star
29

InjectDagger

Java
22
star
30

ErasableTextView

仿支付宝刮奖效果,自定义view
Java
20
star
31

umeng-social-custom-shareui

custom ui
Java
19
star
32

AndroidMvpBase

Android MVP Base Library
Java
18
star
33

simpledb

A Lightweight android database library
Java
12
star
34

AndroidImageBrowser

Android Image Browser
Java
12
star
35

tech-frontier-mvp

8
star
36

common_adapter_viewholder

common_adapter_viewholder
Java
7
star
37

FastScrollLayout

Android fast scroll layout from ListView
Java
6
star
38

te_audios

The Economist audio
5
star
39

Java-23-Design-Patterns

23 design patterns
Java
5
star
40

MockServer

mock server with Go
Go
4
star
41

mdict-analysis

Python
4
star
42

SimpleTask

A Simple Task Library to use AsyncTask easier.
Java
4
star
43

en_dict

3
star
44

bboyfeiyu.github.io

Blog repository
HTML
3
star
45

hehonghui.github.io

HTML
3
star
46

images_gridview_gallery

扫描本地图片,多图选择,异步加载,图片错位示例
Java
3
star
47

LoveWeRead

Java
3
star
48

zapr-sdk-sample-app

Java
2
star
49

SimpleNote

Java
2
star
50

fribidi

C
1
star
51

MusicPlayer2

MusicPlayer
C++
1
star
52

VolleyModule

使用Volley时封装的简单工具类
Java
1
star
53

GradleDemo

Java
1
star
54

dev-tech-frontier

开发技术前线
1
star
55

AndroidEventBus_maven

1
star