diff --git a/README.md b/README.md index 8e6b8c0..14175b1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ +# Deprecated (Temp) + +I think I am not maintaining version 1.x.x anymore, and if I have time and interested in the future, I might re-write it using Compose. + +With that said, I do think v1.4.1 is stable enough to use with ViewPager (Not ViewPager2). In case it is having issue with new versions of Kotlin / Android libraries, I wish you can folk it and use it with simple fixes. Thank you! + # LoopingViewPager A ViewPager and a PagerAdapter that can: diff --git a/app/build.gradle b/app/build.gradle index b2d02c2..b35d27a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,6 +23,7 @@ android { dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation "androidx.recyclerview:recyclerview:1.2.0" implementation project(':loopingviewpager') // implementation 'com.asksira.android:loopingviewpager:1.4.1' implementation "androidx.core:core-ktx:1.3.2" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a48855f..cd6319e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/DemoInfiniteAdapter.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/DemoInfiniteAdapter.kt index ec2d629..4992a7f 100644 --- a/app/src/main/java/com/asksira/loopingviewpagerdemo/DemoInfiniteAdapter.kt +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/DemoInfiniteAdapter.kt @@ -24,7 +24,7 @@ class DemoInfiniteAdapter( return if (viewType == VIEW_TYPE_SPECIAL) LayoutInflater.from( container.context ).inflate(R.layout.item_special, container, false) else LayoutInflater.from(container.context) - .inflate(R.layout.item_pager, container, false) + .inflate(R.layout.item_page, container, false) } override fun bindView( diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/Extensions.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/Extensions.kt index 54b4266..7adbb92 100644 --- a/app/src/main/java/com/asksira/loopingviewpagerdemo/Extensions.kt +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/Extensions.kt @@ -3,6 +3,9 @@ package com.asksira.loopingviewpagerdemo import android.content.Context import android.content.res.Resources import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup import androidx.core.content.ContextCompat fun Int.dp(): Int { @@ -11,4 +14,8 @@ fun Int.dp(): Int { fun Context.getColorCompat(colorRes: Int): Int { return ContextCompat.getColor(this, colorRes) +} + +fun View.inflate(resId: Int, container: ViewGroup, attach: Boolean): View { + return LayoutInflater.from(this.context).inflate(resId, container, attach) } \ No newline at end of file diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/FakeDataSource.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/FakeDataSource.kt new file mode 100644 index 0000000..a68b731 --- /dev/null +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/FakeDataSource.kt @@ -0,0 +1,28 @@ +package com.asksira.loopingviewpagerdemo + +import java.util.ArrayList + +fun createDummyItems(): ArrayList { + val items = ArrayList() + items.add(0, 1) + items.add(1, 2) + items.add(2, 3) + items.add(3, 4) + items.add(4, 5) + items.add(5, 6) + items.add(6, 0) + return items +} + +fun createSecondDummyItems(): ArrayList { + val items = ArrayList() + items.add(0, 1) + items.add(1, 2) + return items +} + +fun createThirdDummyItems(): ArrayList { + val items = ArrayList() + items.add(0, 1) + return items +} \ No newline at end of file diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/ListActivity.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/ListActivity.kt new file mode 100644 index 0000000..1e69408 --- /dev/null +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/ListActivity.kt @@ -0,0 +1,17 @@ +package com.asksira.loopingviewpagerdemo + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.RecyclerView + +class ListActivity: AppCompatActivity() { + + private lateinit var rv: RecyclerView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_recycler) + rv = findViewById(R.id.rv) + rv.adapter = ListAdapter() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/ListAdapter.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/ListAdapter.kt new file mode 100644 index 0000000..268625c --- /dev/null +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/ListAdapter.kt @@ -0,0 +1,78 @@ +package com.asksira.loopingviewpagerdemo + +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.asksira.loopingviewpager.LoopingViewPager +import java.lang.IllegalArgumentException + +class ListAdapter: RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return when (viewType) { + 0 -> PagerViewHolder(parent.inflate(R.layout.item_pager, parent, false)) + 1 -> DummyViewHolder(parent.inflate(R.layout.item_dummy, parent, false)) + else -> throw IllegalArgumentException() + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is PagerViewHolder -> holder.onBind() + is DummyViewHolder -> holder.onBind(position) + } + } + + override fun getItemViewType(position: Int): Int { + return if (position == 0) { + 0 + } else { + 1 + } + } + + override fun getItemCount(): Int { + return 100 + } + + override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) { + when (holder) { + is PagerViewHolder -> holder.onAttach() + } + } + + override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) { + when (holder) { + is PagerViewHolder -> holder.onDetach() + } + } + + inner class PagerViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { + + private val pager: LoopingViewPager = itemView.findViewById(R.id.viewpager) + private var adapter: DemoInfiniteAdapter? = null + + fun onBind() { + adapter = DemoInfiniteAdapter(createDummyItems(), true) + pager.adapter = adapter + } + + fun onAttach() { + pager.resumeAutoScroll() + } + + fun onDetach() { + pager.pauseAutoScroll() + } + + } + + inner class DummyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { + + fun onBind(position: Int) { + itemView.findViewById(R.id.tvDummy).text = position.toString() + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/asksira/loopingviewpagerdemo/MainActivity.kt b/app/src/main/java/com/asksira/loopingviewpagerdemo/MainActivity.kt index 3a6bc8d..ca0e0d8 100644 --- a/app/src/main/java/com/asksira/loopingviewpagerdemo/MainActivity.kt +++ b/app/src/main/java/com/asksira/loopingviewpagerdemo/MainActivity.kt @@ -1,5 +1,6 @@ package com.asksira.loopingviewpagerdemo +import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Button @@ -23,6 +24,7 @@ class MainActivity : AppCompatActivity() { private lateinit var page4: Button private lateinit var page5: Button private lateinit var page6: Button + private lateinit var btnGoListActivity: Button private var currentDataSet = 1 override fun onCreate(savedInstanceState: Bundle?) { @@ -31,7 +33,11 @@ class MainActivity : AppCompatActivity() { viewPager = findViewById(R.id.viewpager) indicatorView = findViewById(R.id.indicator) changeDataSetButton = findViewById(R.id.change_dataset) + btnGoListActivity = findViewById(R.id.btnListActivity) changeDataSetButton.setOnClickListener(View.OnClickListener { changeDataset() }) + btnGoListActivity.setOnClickListener { + startActivity(Intent(this, ListActivity::class.java)) + } changePageLabel = findViewById(R.id.change_page_label) page1 = findViewById(R.id.page1) page2 = findViewById(R.id.page2) @@ -83,31 +89,6 @@ class MainActivity : AppCompatActivity() { super.onPause() } - private fun createDummyItems(): ArrayList { - val items = ArrayList() - items.add(0, 1) - items.add(1, 2) - items.add(2, 3) - items.add(3, 4) - items.add(4, 5) - items.add(5, 6) - items.add(6, 0) - return items - } - - private fun createSecondDummyItems(): ArrayList { - val items = ArrayList() - items.add(0, 1) - items.add(1, 2) - return items - } - - private fun createThirdDummyItems(): ArrayList { - val items = ArrayList() - items.add(0, 1) - return items - } - private fun changeDataset() { if (currentDataSet == 1) { adapter?.itemList = createSecondDummyItems().toList() diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fa20a17..8136dc4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -101,4 +101,14 @@ app:layout_constraintTop_toTopOf="@id/page5" app:layout_constraintLeft_toRightOf="@id/page5"/> +