From e6b49696c9e57e5443b576b231809700fc4ccce3 Mon Sep 17 00:00:00 2001 From: Aryan Moradi Date: Mon, 1 Apr 2019 14:41:02 +0430 Subject: [PATCH] 2019-04-1 14:40 Add itemCount from xml for dataBinding --- advancerecyclerview/build.gradle | 4 +-- .../AdvanceRecyclerView.kt | 28 ++++++++++++------- .../src/main/res/values/attr.xml | 1 + .../MainActivity.kt | 6 +++- app/src/main/res/layout/activity_main.xml | 1 + 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/advancerecyclerview/build.gradle b/advancerecyclerview/build.gradle index d036979..3cf0091 100644 --- a/advancerecyclerview/build.gradle +++ b/advancerecyclerview/build.gradle @@ -10,8 +10,8 @@ android { defaultConfig { minSdkVersion 19 targetSdkVersion 28 - versionCode 1 - versionName "1.0.2" + versionCode 2 + versionName "1.0.3" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/advancerecyclerview/src/main/java/ir/aryanmo/advancerecyclerview/AdvanceRecyclerView.kt b/advancerecyclerview/src/main/java/ir/aryanmo/advancerecyclerview/AdvanceRecyclerView.kt index fa87b83..4c09ed0 100644 --- a/advancerecyclerview/src/main/java/ir/aryanmo/advancerecyclerview/AdvanceRecyclerView.kt +++ b/advancerecyclerview/src/main/java/ir/aryanmo/advancerecyclerview/AdvanceRecyclerView.kt @@ -130,21 +130,24 @@ open class AdvanceRecyclerView : RecyclerView { setAttributes(attrs) } - fun init(@LayoutRes itemView: Int, itemCount: Int, linearLayoutManager: LinearLayoutManager?) { + fun init( + @LayoutRes itemView: Int, itemCount: Int = this.itemCount, + linearLayoutManager: LinearLayoutManager? = null + ) { var linearLayoutManager = linearLayoutManager this.itemView = itemView - if (linearLayoutManager == null) { + linearLayoutManager ?: let { linearLayoutManager = LinearLayoutManager(context) } - this.linearLayoutManager = linearLayoutManager init(itemCount) } fun init(itemCount: Int) { - - Log.e("Ari","init itemCount -> $itemCount") this.itemCount = itemCount - Log.e("Ari","init this.itemCount -> ${this.itemCount}") + init() + } + + private fun init() { adapter = myAdapter setCurrentPosition(0) @@ -162,9 +165,6 @@ open class AdvanceRecyclerView : RecyclerView { if (paginationListener == null) return - Log.e("Aryan", " item pos -> " + linearLayoutManager.findFirstCompletelyVisibleItemPosition()) - - if (linearLayoutManager.childCount + linearLayoutManager.findFirstVisibleItemPosition() >= layoutManager!!.itemCount) { paginationListener!!.onEndItemListener(this, dx, dy) return @@ -187,6 +187,7 @@ open class AdvanceRecyclerView : RecyclerView { protected fun setAttributes(attrs: AttributeSet?) { setOrientationFromAttr(attrs) + setItemCountFromAttr(attrs) } protected fun setOrientationFromAttr(attr: AttributeSet?) { @@ -198,6 +199,13 @@ open class AdvanceRecyclerView : RecyclerView { a.recycle() } + protected fun setItemCountFromAttr(attr: AttributeSet?) { + val a = getStyledAttributes(attr) + val count = a.getInt(R.styleable.AdvanceRecyclerView_ar_adre_itemCount, 0) + itemCount = count + 1 + a.recycle() + } + protected fun getStyledAttributes(attr: AttributeSet?): TypedArray { return context.theme.obtainStyledAttributes( attr, R.styleable.AdvanceRecyclerView, 0, 0 @@ -206,7 +214,7 @@ open class AdvanceRecyclerView : RecyclerView { // PROPERTIES - fun notifyDataSetChanged(newItemCount:Int){ + fun notifyDataSetChanged(newItemCount: Int) { addItemCount(newItemCount) } diff --git a/advancerecyclerview/src/main/res/values/attr.xml b/advancerecyclerview/src/main/res/values/attr.xml index 132ccfc..fe4c83e 100644 --- a/advancerecyclerview/src/main/res/values/attr.xml +++ b/advancerecyclerview/src/main/res/values/attr.xml @@ -5,5 +5,6 @@ + \ No newline at end of file diff --git a/app/src/main/java/ir/aryanmo/advancerecyclerviewexample/MainActivity.kt b/app/src/main/java/ir/aryanmo/advancerecyclerviewexample/MainActivity.kt index cc117ed..71a0e09 100644 --- a/app/src/main/java/ir/aryanmo/advancerecyclerviewexample/MainActivity.kt +++ b/app/src/main/java/ir/aryanmo/advancerecyclerviewexample/MainActivity.kt @@ -2,10 +2,12 @@ package ir.aryanmo.advancerecyclerviewexample import android.support.v7.app.AppCompatActivity import android.os.Bundle +import android.util.Log import android.view.View import android.widget.TextView import ir.aryanmo.advancerecyclerview.AdvanceRecyclerView import kotlinx.android.synthetic.main.activity_main.* +import kotlin.math.log class MainActivity : AppCompatActivity() { @@ -25,7 +27,9 @@ class MainActivity : AppCompatActivity() { } } - re.init(R.layout.test_item, myList.size, null) + Log.e("ary","1") + re.init(itemView = R.layout.test_item) + Log.e("ary","2") goTo.setOnClickListener { if (re.isInitialize) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 1648ea6..79d6718 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -32,6 +32,7 @@ android:id="@+id/re" android:layout_width="match_parent" android:layout_height="match_parent" + app:ar_adre_itemCount="5" android:text="Hello World!"/> \ No newline at end of file