Skip to content

Instantly share code, notes, and snippets.

View FStranieri's full-sized avatar

Francesco Stranieri FStranieri

View GitHub Profile
@FStranieri
FStranieri / ExampleListUpdateCallback.kt
Last active May 13, 2018 11:18
ListUpdateCallback sample
class ExampleListUpdateCallback<T : RecyclerView.ViewHolder?>(val adapter: RecyclerView.Adapter<T>) : ListUpdateCallback {
override fun onChanged(position: Int, count: Int, payload: Any?) {
this.adapter.notifyItemRangeChanged(position, count, payload)
}
override fun onMoved(fromPosition: Int, toPosition: Int) {
this.adapter.notifyItemMoved(fromPosition, toPosition)
}
override fun onInserted(position: Int, count: Int) {
@FStranieri
FStranieri / ExampleCardsDiffCallback.kt
Created May 13, 2018 11:26
ExampleCardsDiffCallback
class ExampleCardsDiffCallback(private var oldList: List<ExampleModel>,
private var newList: List<ExampleModel>) : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return oldList[oldItemPosition].id == newList[newItemPosition].id
}
override fun getOldListSize(): Int {
return oldList.size
}
@FStranieri
FStranieri / ExampleCardsAdapter.kt
Last active May 13, 2018 11:48
DiffUtil example - Adapter
class ExampleCardsAdapter(private val context: Context) : RecyclerView.Adapter<ExampleViewHolder>() {
private var list: List<ExampleModel> = listOf()
fun updateList(newList: List<ExampleModel>) {
val diffResult = DiffUtil.calculateDiff(ExampleCardsDiffCallback(this.list, newList))
this.list = newList
diffResult.dispatchUpdatesTo(ExampleListUpdateCallback(this))
}
@FStranieri
FStranieri / AnkoActivity.kt
Created May 20, 2018 10:41
Example activity with Anko layouts
class AnkoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val ankoComponent = ToolbarTemplateLayout<AnkoActivity>(object : ToolbarTemplateLayout.ToolbarTemplateLayoutInterface {
override fun toolbarStyleId(): Int = R.style.ToolbarStyle
override fun includedLayoutId(): Int = R.layout.activity_anko
}).setContentView(this)
@FStranieri
FStranieri / AnkoActivity2.kt
Created May 20, 2018 10:44
Example activity with Anko layouts (2)
class AnkoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val ankoComponent = ToolbarNBottombarTemplateLayout<AnkoActivity>(object : ToolbarNBottombarTemplateLayout.ToolbarNBottombarTemplateLayoutInterface {
override fun toolbarStyleId(): Int = R.style.ToolbarStyle
override fun includedLayoutId(): Int = R.layout.activity_anko
override fun footerStyleId(): Int = R.style.FooterStyle
})
@FStranieri
FStranieri / anko_test_styles.xml
Created May 20, 2018 10:46
styles for anko example
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
@FStranieri
FStranieri / ToolbarTemplateLayout.kt
Created May 20, 2018 10:48
Template layout example with anko
class ToolbarTemplateLayout<A: Activity>(private val layoutInterface: ToolbarTemplateLayoutInterface): AnkoComponent<A> {
override fun createView(ui: AnkoContext<A>): View {
return ui.verticalLayout {
themedToolbar(layoutInterface.toolbarStyleId())
include<View>(layoutInterface.includedLayoutId())
}
}
interface ToolbarTemplateLayoutInterface{
@FStranieri
FStranieri / ToolbarNBottombarTemplateLayout.kt
Created May 20, 2018 10:50
Template layout example with anko (2)
class ToolbarNBottombarTemplateLayout<A : Activity>(private val layoutInterface: ToolbarNBottombarTemplateLayoutInterface) : AnkoComponent<A> {
override fun createView(ui: AnkoContext<A>): View {
return ui.constraintLayout {
val toolbar = themedToolbar(layoutInterface.toolbarStyleId())
toolbar.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT)
val included = include<View>(layoutInterface.includedLayoutId()) {
@FStranieri
FStranieri / ToolbarNBottombarTemplateLayout2.kt
Created May 20, 2018 10:52
Template layout example with anko (3)
class ToolbarNBottombarTemplateLayout<A : Activity>(private val layoutInterface: ToolbarNBottombarTemplateLayoutInterface) : AnkoComponent<A> {
var binding: ViewDataBinding? = null
override fun createView(ui: AnkoContext<A>): View {
return ui.constraintLayout {
val toolbar = themedToolbar(layoutInterface.toolbarStyleId())
toolbar.layoutParams = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT)
@FStranieri
FStranieri / AnkoActivity3.kt
Created May 20, 2018 11:36
Example activity with anko and databinding
class AnkoActivity : AppCompatActivity() {
lateinit var binding: ActivityAnkoBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val ankoComponent = ToolbarNBottombarTemplateLayout<AnkoActivity>(object : ToolbarNBottombarTemplateLayout.ToolbarNBottombarTemplateLayoutInterface {
override fun toolbarStyleId(): Int = R.style.ToolbarStyle
override fun includedLayoutId(): Int = R.layout.activity_anko