Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@ android {
}

dependencies {
compile "com.android.support:appcompat-v7:$versions.support"
compile "com.android.support:cardview-v7:$versions.support"
compile "com.android.support:design:$versions.support"
compile "com.android.support:recyclerview-v7:$versions.support"
compile "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"
kapt "com.android.databinding:compiler:$versions.gradlePlugin"
compile project(":lastadapter")
implementation "androidx.appcompat:appcompat:$versions.support"
implementation "androidx.cardview:cardview:$versions.support"
implementation "com.google.android.material:material:$versions.support"
implementation "androidx.recyclerview:recyclerview:$versions.support"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"
implementation project(":lastadapter")
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.nitrico.lastadapter_sample.data

import android.databinding.ObservableArrayList
import androidx.databinding.ObservableArrayList

object Data {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.nitrico.lastadapter_sample.data

import android.databinding.ObservableArrayList
import androidx.databinding.ObservableArrayList

object StableData {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.github.nitrico.lastadapter_sample.ui

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.nitrico.lastadapter_sample.R

open class ListFragment : Fragment() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.github.nitrico.lastadapter_sample.ui

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.github.nitrico.lastadapter_sample.data.Data
import com.github.nitrico.lastadapter_sample.R
import com.github.nitrico.lastadapter_sample.data.Header
Expand All @@ -23,6 +24,7 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val v: ViewPager
pager.adapter = ViewPagerAdapter(supportFragmentManager)
tabs.setupWithViewPager(pager)
}
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.design.widget.AppBarLayout
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

<android.support.v7.widget.Toolbar
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"/>

<android.support.design.widget.TabLayout
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

</android.support.design.widget.AppBarLayout>
</com.google.android.material.appbar.AppBarLayout>

<android.support.v4.view.ViewPager
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_list.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<android.support.v7.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="match_parent"
Expand Down
10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
buildscript {
ext.versions = [
sdkMin : 14,
sdkTarget : 27,
buildTools : '27.0.1',
gradlePlugin : '3.0.1',
kotlin : '1.2.0',
support : '27.0.2'
sdkTarget : 28,
buildTools : '28.0.2',
gradlePlugin : '3.3.0-alpha05',
kotlin : '1.2.60',
support : '1.0.0-rc01'
]
repositories {
google()
Expand Down
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@
# org.gradle.parallel=true

org.gradle.jvmargs=-Xmx2048m
android.useAndroidX=true
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip
4 changes: 2 additions & 2 deletions lastadapter/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
}

dependencies {
compile "com.android.support:recyclerview-v7:$versions.support"
compile "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"
compileOnly "androidx.recyclerview:recyclerview:$versions.support"
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlin"
}

apply from: 'publish.gradle'
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@

package com.github.nitrico.lastadapter

import android.databinding.ViewDataBinding
import android.support.v7.widget.RecyclerView
import androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.RecyclerView


open class Holder<B : ViewDataBinding>(val binding: B) : RecyclerView.ViewHolder(binding.root) {
internal var created = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@

package com.github.nitrico.lastadapter

import android.databinding.DataBindingUtil
import android.databinding.ObservableList
import android.databinding.OnRebindCallback
import android.databinding.ViewDataBinding
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ObservableList
import androidx.databinding.OnRebindCallback
import androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.RecyclerView

class LastAdapter(private val list: List<Any>,
private val variable: Int? = null,
Expand All @@ -46,22 +46,17 @@ class LastAdapter(private val list: List<Any>,
}

@JvmOverloads
fun <T : Any> map(clazz: Class<T>, layout: Int, variable: Int? = null)
= apply { map[clazz] = BaseType(layout, variable) }
fun <T : Any> map(clazz: Class<T>, layout: Int, variable: Int? = null) = apply { map[clazz] = BaseType(layout, variable) }

inline fun <reified T : Any> map(layout: Int, variable: Int? = null)
= map(T::class.java, layout, variable)
inline fun <reified T : Any> map(layout: Int, variable: Int? = null) = map(T::class.java, layout, variable)

fun <T : Any> map(clazz: Class<T>, type: AbsType<*>)
= apply { map[clazz] = type }
fun <T : Any> map(clazz: Class<T>, type: AbsType<*>) = apply { map[clazz] = type }

inline fun <reified T : Any> map(type: AbsType<*>)
= map(T::class.java, type)
inline fun <reified T : Any> map(type: AbsType<*>) = map(T::class.java, type)

inline fun <reified T : Any, B : ViewDataBinding> map(layout: Int,
variable: Int? = null,
noinline f: (Type<B>.() -> Unit)? = null)
= map(T::class.java, Type<B>(layout, variable).apply { f?.invoke(this) })
noinline f: (Type<B>.() -> Unit)? = null) = map(T::class.java, Type<B>(layout, variable).apply { f?.invoke(this) })

fun handler(handler: Handler) = apply {
when (handler) {
Expand All @@ -71,7 +66,7 @@ class LastAdapter(private val list: List<Any>,
}
layoutHandler = handler
}
is TypeHandler -> typeHandler = handler
is TypeHandler -> typeHandler = handler
}
}

Expand All @@ -86,9 +81,8 @@ class LastAdapter(private val list: List<Any>,
fun into(recyclerView: RecyclerView) = apply { recyclerView.adapter = this }



override fun onCreateViewHolder(view: ViewGroup, viewType: Int): Holder<ViewDataBinding> {
val binding = DataBindingUtil.inflate<ViewDataBinding>(inflater, viewType, view, false)
val binding = DataBindingUtil.inflate<ViewDataBinding>(inflater!!, viewType, view, false)
val holder = Holder(binding)
binding.addOnRebindCallback(object : OnRebindCallback<ViewDataBinding>() {
override fun onPreBind(binding: ViewDataBinding) = recyclerView?.isComputingLayout ?: false
Expand Down Expand Up @@ -167,18 +161,15 @@ class LastAdapter(private val list: List<Any>,
recyclerView = null
}

override fun getItemViewType(position: Int)
= layoutHandler?.getItemLayout(list[position], position)
override fun getItemViewType(position: Int) = layoutHandler?.getItemLayout(list[position], position)
?: typeHandler?.getItemType(list[position], position)?.layout
?: getType(position)?.layout
?: throw RuntimeException("Invalid object at position $position: ${list[position].javaClass}")

private fun getType(position: Int)
= typeHandler?.getItemType(list[position], position)
private fun getType(position: Int) = typeHandler?.getItemType(list[position], position)
?: map[list[position].javaClass]

private fun getVariable(type: BaseType)
= type.variable
private fun getVariable(type: BaseType) = type.variable
?: variable
?: throw IllegalStateException("No variable specified for type ${type.javaClass.simpleName}")

Expand All @@ -196,7 +187,7 @@ class LastAdapter(private val list: List<Any>,

private fun notifyCreate(holder: Holder<ViewDataBinding>, type: AbsType<ViewDataBinding>) {
when (type) {
is Type -> {
is Type -> {
setClickListeners(holder, type)
type.onCreate?.invoke(holder)
}
Expand All @@ -207,14 +198,14 @@ class LastAdapter(private val list: List<Any>,

private fun notifyBind(holder: Holder<ViewDataBinding>, type: AbsType<ViewDataBinding>) {
when (type) {
is Type -> type.onBind?.invoke(holder)
is Type -> type.onBind?.invoke(holder)
is ItemType -> type.onBind(holder)
}
}

private fun notifyRecycle(holder: Holder<ViewDataBinding>, type: AbsType<ViewDataBinding>) {
when (type) {
is Type -> type.onRecycle?.invoke(holder)
is Type -> type.onRecycle?.invoke(holder)
is ItemType -> type.onRecycle(holder)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

package com.github.nitrico.lastadapter

import android.databinding.ObservableList
import android.os.Looper
import android.support.v7.widget.RecyclerView
import androidx.databinding.ObservableList
import androidx.recyclerview.widget.RecyclerView
import java.lang.ref.WeakReference

class ObservableListCallback<H : RecyclerView.ViewHolder>(adapter: RecyclerView.Adapter<H>)
Expand Down Expand Up @@ -48,7 +48,7 @@ class ObservableListCallback<H : RecyclerView.ViewHolder>(adapter: RecyclerView.
}

override fun onItemRangeMoved(list: ObservableList<Any>, from: Int, to: Int, count: Int) {
adapter?.let { for (i in 0..count-1) it.notifyItemMoved(from+i, to+i) }
adapter?.let { for (i in 0..count - 1) it.notifyItemMoved(from + i, to + i) }
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@

package com.github.nitrico.lastadapter

import android.databinding.ViewDataBinding
import androidx.databinding.ViewDataBinding


open class BaseType
@JvmOverloads constructor(open val layout: Int, open val variable: Int? = null)
Expand All @@ -27,9 +28,9 @@ abstract class AbsType<B : ViewDataBinding>

open class ItemType<B : ViewDataBinding>
@JvmOverloads constructor(layout: Int, variable: Int? = null) : AbsType<B>(layout, variable) {
open fun onCreate(holder: Holder<B>) { }
open fun onBind(holder: Holder<B>) { }
open fun onRecycle(holder: Holder<B>) { }
open fun onCreate(holder: Holder<B>) {}
open fun onBind(holder: Holder<B>) {}
open fun onRecycle(holder: Holder<B>) {}
}

open class Type<B : ViewDataBinding>
Expand Down