├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ ├── values-w820dp
│ │ │ │ ├── strings.xml
│ │ │ │ └── dimens.xml
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ └── styles.xml
│ │ │ └── layout
│ │ │ │ ├── activity_main_tablet.xml
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── rv_item_view_text.xml
│ │ │ │ └── rv_item_view_image.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── github
│ │ │ │ └── captain_miao
│ │ │ │ └── uniqueadapter
│ │ │ │ ├── model
│ │ │ │ ├── BaseViewModel.java
│ │ │ │ ├── ImageModel.java
│ │ │ │ └── TextModel.java
│ │ │ │ ├── binding
│ │ │ │ └── PicassoBinding.java
│ │ │ │ └── MainActivity.java
│ │ └── AndroidManifest.xml
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── github
│ │ │ └── captain_miao
│ │ │ └── uniqueadapter
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── github
│ │ └── captain_miao
│ │ └── uniqueadapter
│ │ └── ApplicationTest.java
├── proguard-rules.pro
└── build.gradle
├── library
├── .gitignore
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── github
│ │ │ └── captain_miao
│ │ │ └── uniqueadapter
│ │ │ └── library
│ │ │ ├── ItemModel.java
│ │ │ ├── OnClickPresenter.java
│ │ │ ├── OnLongClickPresenter.java
│ │ │ ├── UniqueViewHolder.java
│ │ │ ├── UniqueAdapter.java
│ │ │ └── BaseUniqueAdapter.java
│ │ └── res
│ │ └── layout
│ │ └── data_binding_variable_id.xml
├── proguard-rules.pro
├── build.gradle
├── gradle.properties
└── gradle-mvn-push.gradle
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradle.properties
├── gradlew.bat
├── README.md
└── gradlew
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/library/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':library'
2 |
--------------------------------------------------------------------------------
/library/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/captain-miao/UniqueAdapter/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | true
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | UniAdapter
3 |
4 |
5 | true
6 | false
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Jan 20 12:11:17 CST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
7 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/ItemModel.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | /**
4 | * @author YanLu
5 | * @since 16/09/02
6 | */
7 |
8 | public interface ItemModel {
9 |
10 | // recycleView's itemView layout
11 | int getItemViewLayoutId();
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/OnClickPresenter.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | import android.view.View;
4 |
5 | import java.io.Serializable;
6 |
7 | /**
8 | * @author YanLu
9 | * @since 16/09/02
10 | */
11 | public interface OnClickPresenter extends Serializable {
12 | void onClick(View view, T t);
13 | }
14 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/OnLongClickPresenter.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | import android.view.View;
4 |
5 | import java.io.Serializable;
6 |
7 | /**
8 | * @author YanLu
9 | * @since 17/06/25
10 | */
11 | public interface OnLongClickPresenter extends Serializable {
12 | boolean onLongClick(View view, T t);
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/captain_miao/uniqueadapter/model/BaseViewModel.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.model;
2 |
3 |
4 | import com.github.captain_miao.uniqueadapter.library.ItemModel;
5 |
6 | import java.io.Serializable;
7 |
8 | /**
9 | * @author YanLu
10 | * @since 16/09/03
11 | */
12 | public abstract class BaseViewModel implements ItemModel, Serializable {
13 | private static final long serialVersionUID = 20160903L;
14 |
15 | }
--------------------------------------------------------------------------------
/app/src/test/java/com/github/captain_miao/uniqueadapter/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/github/captain_miao/uniqueadapter/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main_tablet.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/captain_miao/uniqueadapter/model/ImageModel.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.model;
2 |
3 | import com.github.captain_miao.uniqueadapter.R;
4 |
5 | /**
6 | * @author YanLu
7 | * @since 16/09/03
8 | */
9 |
10 | public class ImageModel extends BaseViewModel {
11 |
12 | public String url;
13 |
14 | public ImageModel(String url) {
15 | this.url = url;
16 | }
17 | @Override
18 | public int getItemViewLayoutId() {
19 | return R.layout.rv_item_view_image;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/captain_miao/uniqueadapter/model/TextModel.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.model;
2 |
3 | import com.github.captain_miao.uniqueadapter.R;
4 | import com.github.captain_miao.uniqueadapter.library.ItemModel;
5 |
6 | /**
7 | * @author YanLu
8 | * @since 16/09/03
9 | */
10 |
11 | public class TextModel extends BaseViewModel implements ItemModel {
12 |
13 | public String text;
14 |
15 | public TextModel(String text) {
16 | this.text = text;
17 | }
18 |
19 | @Override
20 | public int getItemViewLayoutId() {
21 | return R.layout.rv_item_view_text;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/UniqueViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | import android.databinding.DataBindingUtil;
4 | import android.databinding.ViewDataBinding;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.view.View;
7 |
8 | /**
9 | * @author YanLu
10 | * @since 16/9/4
11 | */
12 | public class UniqueViewHolder extends RecyclerView.ViewHolder {
13 | public ViewDataBinding dataBinding;
14 |
15 | public UniqueViewHolder(View itemView) {
16 | super(itemView);
17 | dataBinding = DataBindingUtil.bind(itemView);
18 | }
19 |
20 | public ViewDataBinding getBinding() {
21 | return dataBinding;
22 | }
23 | }
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/captain_miao/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/library/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/captain_miao/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/library/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion this.compileSdkVersion
5 | buildToolsVersion this.buildToolsVersion
6 |
7 | defaultConfig {
8 | minSdkVersion this.minSdkVersion
9 | targetSdkVersion this.targetSdkVersion
10 | versionCode 110
11 | versionName "1.1.0"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 |
20 | dataBinding {
21 | enabled = true
22 | }
23 | }
24 |
25 | dependencies {
26 | compile("com.android.support:recyclerview-v7:${this.supportLibrariesVersion}")
27 | }
28 |
29 | apply from: './gradle-mvn-push.gradle'
30 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/data_binding_variable_id.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
15 |
18 |
19 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/library/gradle.properties:
--------------------------------------------------------------------------------
1 | #VERSION_NAME=1.0.0-SNAPSHOT
2 | VERSION_NAME=1.1.0
3 | VERSION_CODE=110
4 |
5 | POM_GROUP=com.github.captain-miao
6 | POM_ARTIFACT_ID=uniqueadapter
7 | POM_PACKAGING=aar
8 |
9 |
10 | #OSS_USERNAME=
11 | #OSS_PWD=
12 |
13 |
14 | POM_NAME=The UniqueAdapter With DataBinding
15 | POM_DESCRIPTION=The UniqueAdapter With DataBinding.
16 |
17 |
18 | POM_URL=https://github.com/captain-miao/UniqueAdapter
19 | POM_SCM_URL=https://github.com/captain-miao/UniqueAdapter
20 | POM_SCM_CONNECTION=scm:https://github.com/captain-miao/UniqueAdapter.git
21 | POM_SCM_DEV_CONNECTION=scm:https://github.com/captain-miao/UniqueAdapter.git
22 |
23 |
24 | POM_LICENCE_NAME=MIT
25 | POM_LICENCE_URL=http://opensource.org/licenses/MIT
26 | POM_LICENCE_DIST=repo
27 | POM_DEVELOPER_ID=yanlu
28 | POM_DEVELOPER_NAME=yanlu
29 |
30 |
31 | POM_ISSUE_SYSTEM=GitHub Issues
32 | POM_ISSUE_URL=https://github.com/captain-miao/UniqueAdapter/issues
33 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/captain_miao/uniqueadapter/binding/PicassoBinding.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.binding;
2 |
3 | import android.databinding.BindingAdapter;
4 | import android.graphics.drawable.Drawable;
5 | import android.widget.ImageView;
6 |
7 | import com.squareup.picasso.Picasso;
8 |
9 | /**
10 | * @author YanLu
11 | * @since 16/4/25
12 | */
13 | public class PicassoBinding {
14 | private static final String TAG = "PicassoBinding";
15 |
16 | @BindingAdapter({"imageUrl"})
17 | public static void imageLoader(ImageView imageView, String url) {
18 | Picasso.get().load(url).into(imageView);
19 | }
20 | @BindingAdapter({"imageUrl", "error"})
21 | public static void imageLoader(ImageView imageView, String url, Drawable error) {
22 | Picasso.get().load(url).error(error).into(imageView);
23 | }
24 |
25 | @BindingAdapter({"android:src"})
26 | public static void setImageViewResource(ImageView imageView, int resource) {
27 | imageView.setImageResource(resource);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion this.compileSdkVersion
5 | buildToolsVersion this.buildToolsVersion
6 |
7 | defaultConfig {
8 | applicationId "com.github.captain_miao.uniqueadapter"
9 | minSdkVersion this.minSdkVersion
10 | targetSdkVersion this.targetSdkVersion
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | dataBinding {
22 | enabled = true
23 | }
24 | }
25 |
26 | dependencies {
27 | implementation fileTree(dir: 'libs', include: ['*.jar'])
28 | testImplementation 'junit:junit:4.12'
29 | implementation "com.android.support:appcompat-v7:${this.supportLibrariesVersion}"
30 | implementation 'com.squareup.picasso:picasso:2.71828'
31 | // implementation 'com.github.captain-miao:uniqueadapter:1.1.0'
32 |
33 | implementation project(':library')
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/rv_item_view_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
15 |
18 |
19 |
20 |
25 |
26 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/UniqueAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author YanLu
9 | * @since 16/09/02
10 | */
11 |
12 | public class UniqueAdapter extends BaseUniqueAdapter {
13 |
14 | protected final List extends ItemModel> mDataList;
15 |
16 |
17 | public UniqueAdapter(@NonNull List extends ItemModel> dataList) {
18 | this.mDataList = dataList;
19 | }
20 |
21 | public UniqueAdapter(@NonNull List extends ItemModel> dataList,
22 | OnClickPresenter extends ItemModel> onClickPresenter) {
23 | this.mDataList = dataList;
24 | this.mOnClickPresenter = onClickPresenter;
25 | }
26 | public UniqueAdapter(@NonNull List extends ItemModel> dataList,
27 | OnClickPresenter extends ItemModel> onClickPresenter,
28 | OnLongClickPresenter extends ItemModel> onLongClickPresenter) {
29 | this.mDataList = dataList;
30 | this.mOnClickPresenter = onClickPresenter;
31 | this.mOnLongClickPresenter = onLongClickPresenter;
32 | }
33 |
34 | public ItemModel getItem(int position) {
35 | return mDataList.get(position);
36 | }
37 |
38 | @Override
39 | public int getItemCount() {
40 | return mDataList.size();
41 | }
42 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/rv_item_view_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
20 |
23 |
24 |
25 |
31 |
32 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/captain_miao/uniqueadapter/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter;
2 |
3 | import android.databinding.DataBindingUtil;
4 | import android.os.Bundle;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.support.v7.widget.LinearLayoutManager;
7 | import android.support.v7.widget.RecyclerView;
8 | import android.view.View;
9 | import android.widget.Toast;
10 |
11 | import com.github.captain_miao.uniqueadapter.databinding.ActivityMainBinding;
12 | import com.github.captain_miao.uniqueadapter.library.ItemModel;
13 | import com.github.captain_miao.uniqueadapter.library.OnLongClickPresenter;
14 | import com.github.captain_miao.uniqueadapter.library.UniqueAdapter;
15 | import com.github.captain_miao.uniqueadapter.library.OnClickPresenter;
16 | import com.github.captain_miao.uniqueadapter.model.ImageModel;
17 | import com.github.captain_miao.uniqueadapter.model.TextModel;
18 |
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 | public class MainActivity extends AppCompatActivity implements OnClickPresenter,OnLongClickPresenter {
23 |
24 | @Override
25 | protected void onCreate(Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 | ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
28 | RecyclerView recyclerView = binding.rvExample;
29 |
30 | recyclerView.setLayoutManager(new LinearLayoutManager(this));
31 |
32 | recyclerView.setAdapter(new UniqueAdapter(getMockData(), this, this));
33 | }
34 |
35 | @Override
36 | public void onClick(View view, ItemModel item) {
37 | if(item instanceof TextModel){
38 | Toast.makeText(this, ((TextModel)item).text, Toast.LENGTH_SHORT).show();
39 | } else if(item instanceof ImageModel){
40 | Toast.makeText(this, ((ImageModel)item).url, Toast.LENGTH_SHORT).show();
41 | }
42 | }
43 |
44 |
45 | private List getMockData(){
46 | List dataList = new ArrayList<>();
47 | dataList.add(new TextModel("Photo 1"));
48 | dataList.add(new ImageModel("http://ww2.sinaimg.cn/bmiddle/7a8aed7bjw1f340c8jrk4j20j60srgpf.jpg"));
49 | dataList.add(new TextModel("Photo 2"));
50 | dataList.add(new ImageModel("http://ww1.sinaimg.cn/bmiddle/610dc034jw1f7ef7i5m1zj20u011hdjm.jpg"));
51 |
52 | return dataList;
53 | }
54 |
55 | @Override
56 | public boolean onLongClick(View view, ItemModel item) {
57 | if (item instanceof ImageModel) {
58 | Toast.makeText(this, "Pretty Girl", Toast.LENGTH_SHORT).show();
59 | }
60 | return true;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/library/src/main/java/com/github/captain_miao/uniqueadapter/library/BaseUniqueAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.captain_miao.uniqueadapter.library;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.LayoutInflater;
5 | import android.view.ViewGroup;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author YanLu
11 | * @since 16/09/02
12 | */
13 |
14 | public abstract class BaseUniqueAdapter extends RecyclerView.Adapter {
15 |
16 | public static final int NO_ITEM_TYPE = -1;
17 |
18 | protected OnClickPresenter extends ItemModel> mOnClickPresenter;
19 | protected OnLongClickPresenter extends ItemModel> mOnLongClickPresenter;
20 |
21 | public abstract ItemModel getItem(int position) ;
22 |
23 | @Override
24 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
25 | if (viewType > 0) {// it's itemView of RecycleView layout ResourceId
26 | return new UniqueViewHolder(
27 | LayoutInflater
28 | .from(parent.getContext())
29 | .inflate(viewType, parent, false));
30 | } else {
31 | return null;
32 | }
33 | }
34 |
35 | @Override
36 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
37 | if(holder instanceof UniqueViewHolder) {
38 | ItemModel item = getItem(position);
39 | UniqueViewHolder vh = ((UniqueViewHolder) holder);
40 | vh.dataBinding.setVariable(com.github.captain_miao.uniqueadapter.library.BR.viewModel, item);
41 | if (mOnClickPresenter != null) {
42 | vh.dataBinding.setVariable(com.github.captain_miao.uniqueadapter.library.BR.onClickPresenter, mOnClickPresenter);
43 | }
44 | if (mOnLongClickPresenter != null) {
45 | vh.dataBinding.setVariable(com.github.captain_miao.uniqueadapter.library.BR.onLongClickPresenter, mOnLongClickPresenter);
46 | }
47 | vh.dataBinding.executePendingBindings();
48 | }
49 | }
50 |
51 |
52 | @Override
53 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List