Skip to content

Commit fc65e4e

Browse files
committed
extension improvements
1 parent c1fbad6 commit fc65e4e

File tree

6 files changed

+67
-25
lines changed

6 files changed

+67
-25
lines changed

.idea/misc.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/techpaliyal/androidkotlinmvvm/ui/activity/LoadingListingActivity.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import android.content.Intent
55
import android.os.Bundle
66
import android.widget.Toast
77
import androidx.appcompat.app.AppCompatActivity
8+
import androidx.databinding.ViewDataBinding
89
import androidx.lifecycle.Observer
910
import com.techpaliyal.androidkotlinmvvm.R
1011
import com.techpaliyal.androidkotlinmvvm.databinding.ActivityListingBinding
1112
import com.techpaliyal.androidkotlinmvvm.listeners.BasicListener
13+
import com.techpaliyal.androidkotlinmvvm.listeners.UsersListener
1214
import com.techpaliyal.androidkotlinmvvm.model.UserModel
1315
import com.techpaliyal.androidkotlinmvvm.ui.view_model.LoadingListingViewModel
1416
import com.techpaliyal.androidkotlinmvvm.ui.view_model.initViewModel
@@ -42,7 +44,10 @@ class LoadingListingActivity : AppCompatActivity() {
4244
UniversalRecyclerAdapter.Builder<UserModel>(
4345
lifecycleOwner = this,
4446
content = UniversalAdapterViewType.Content(resource = R.layout.item_user,
45-
object : BasicListener<UserModel> {
47+
object : UsersListener {
48+
override fun onLikeClicked(binding: ViewDataBinding, model: UserModel) {
49+
50+
}
4651
override fun onClick(model: UserModel) {
4752
Toast.makeText(this@LoadingListingActivity, model.name, Toast.LENGTH_SHORT)
4853
.show()

app/src/main/java/com/techpaliyal/androidkotlinmvvm/ui/activity/ShimmerListingActivity.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import android.content.Intent
55
import android.os.Bundle
66
import android.widget.Toast
77
import androidx.appcompat.app.AppCompatActivity
8+
import androidx.databinding.ViewDataBinding
89
import androidx.lifecycle.Observer
910
import com.techpaliyal.androidkotlinmvvm.R
1011
import com.techpaliyal.androidkotlinmvvm.databinding.ActivityListingBinding
1112
import com.techpaliyal.androidkotlinmvvm.listeners.BasicListener
13+
import com.techpaliyal.androidkotlinmvvm.listeners.UsersListener
1214
import com.techpaliyal.androidkotlinmvvm.model.UserModel
1315
import com.techpaliyal.androidkotlinmvvm.ui.view_model.LoadingListingViewModel
1416
import com.techpaliyal.androidkotlinmvvm.ui.view_model.initViewModel
@@ -44,7 +46,10 @@ class ShimmerListingActivity : AppCompatActivity() {
4446
null,
4547
content = UniversalAdapterViewType.Content(
4648
R.layout.item_user,
47-
listener = object : BasicListener<UserModel> {
49+
listener = object : UsersListener {
50+
override fun onLikeClicked(binding: ViewDataBinding, model: UserModel) {
51+
52+
}
4853
override fun onClick(model: UserModel) {
4954
Toast.makeText(this@ShimmerListingActivity, model.name, Toast.LENGTH_SHORT)
5055
.show()

app/src/main/java/com/techpaliyal/androidkotlinmvvm/ui/view_model/BindingTestViewModel.kt

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.techpaliyal.androidkotlinmvvm.ui.view_model
33
import androidx.lifecycle.*
44
import com.techpaliyal.androidkotlinmvvm.model.UserModel
55
import com.yogeshpaliyal.universalAdapter.utils.Resource
6+
import kotlinx.coroutines.Dispatchers
67
import kotlinx.coroutines.delay
78
import kotlinx.coroutines.launch
89

@@ -18,17 +19,35 @@ class BindingTestViewModel : ViewModel() {
1819

1920
private fun loadData(){
2021

21-
viewModelScope.launch {
22+
viewModelScope.launch(Dispatchers.IO) {
2223
_usersData.postValue(Resource.loading())
23-
delay(3000)
24-
val tempArr = ArrayList<UserModel>()
25-
tempArr.add(UserModel(name = "Yogesh",image = "https://randomuser.me/api/portraits/men/52.jpg", address = "Jodhpur"))
26-
tempArr.add(UserModel(name = "Umesh",image = "https://randomuser.me/api/portraits/men/62.jpg"))
27-
tempArr.add(UserModel(name = "Sohan",image = "https://randomuser.me/api/portraits/men/84.jpg"))
28-
tempArr.add(UserModel(name = "Jitendra",image = "https://randomuser.me/api/portraits/men/83.jpg"))
29-
_usersData.postValue(Resource.success(tempArr))
24+
for (i in 0 until 100) {
25+
delay(3000)
26+
addDummyData()
27+
}
3028
}
3129

3230
}
3331

32+
private fun addDummyData(){
33+
val tempArr = ArrayList<UserModel>()
34+
tempArr.add(UserModel(name = "Yogesh",image = "https://randomuser.me/api/portraits/men/52.jpg", address = "Jodhpur"))
35+
tempArr.add(UserModel(name = "Umesh",image = "https://randomuser.me/api/portraits/men/62.jpg"))
36+
tempArr.add(UserModel(name = "Sohan",image = "https://randomuser.me/api/portraits/men/84.jpg"))
37+
tempArr.add(UserModel(name = "Jitendra",image = "https://randomuser.me/api/portraits/men/83.jpg"))
38+
tempArr.add(UserModel(name = "Yogesh",image = "https://randomuser.me/api/portraits/men/52.jpg", address = "Jodhpur"))
39+
tempArr.add(UserModel(name = "Umesh",image = "https://randomuser.me/api/portraits/men/62.jpg"))
40+
tempArr.add(UserModel(name = "Sohan",image = "https://randomuser.me/api/portraits/men/84.jpg"))
41+
tempArr.add(UserModel(name = "Jitendra",image = "https://randomuser.me/api/portraits/men/83.jpg"))
42+
tempArr.add(UserModel(name = "Yogesh",image = "https://randomuser.me/api/portraits/men/52.jpg", address = "Jodhpur"))
43+
tempArr.add(UserModel(name = "Umesh",image = "https://randomuser.me/api/portraits/men/62.jpg"))
44+
tempArr.add(UserModel(name = "Sohan",image = "https://randomuser.me/api/portraits/men/84.jpg"))
45+
tempArr.add(UserModel(name = "Jitendra",image = "https://randomuser.me/api/portraits/men/83.jpg"))
46+
tempArr.add(UserModel(name = "Yogesh",image = "https://randomuser.me/api/portraits/men/52.jpg", address = "Jodhpur"))
47+
tempArr.add(UserModel(name = "Umesh",image = "https://randomuser.me/api/portraits/men/62.jpg"))
48+
tempArr.add(UserModel(name = "Sohan",image = "https://randomuser.me/api/portraits/men/84.jpg"))
49+
tempArr.add(UserModel(name = "Jitendra",image = "https://randomuser.me/api/portraits/men/83.jpg"))
50+
_usersData.postValue(Resource.success(tempArr))
51+
}
52+
3453
}

app/src/main/res/layout/activity_binding_adapter_test.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
item_layout="@{R.layout.item_user}"
2929
loading_layout="@{R.layout.item_user_shimmer}"
3030
data="@{mViewModel.usersData}"
31+
ura_use_tag="@{false}"
3132
lifecycleOwner="@{myLifecycleOwner}"
3233
app:layout_constraintTop_toTopOf="parent"
3334
app:layout_constraintStart_toStartOf="parent"

universal_adapter/src/main/java/com/yogeshpaliyal/universalAdapter/extensions/BindingAdaptersUtils.kt

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ fun RecyclerView.setRecyclerAdapter(adapter: RecyclerView.Adapter<*>) {
2828
"no_data_layout",
2929
"item_listener",
3030
"error_listener",
31-
"no_data_listener"],
31+
"no_data_listener",
32+
"ura_use_tag"], // Allow universal recycler view to set tag
3233
requireAll = false
3334
)
34-
@Suppress
35+
@Suppress("UNCHECKED_CAST")
3536
fun <T> RecyclerView.setRecyclerAdapter(
3637
lifecycleOwner: LifecycleOwner?,
3738
data: Resource<List<T>>?,
@@ -43,20 +44,30 @@ fun <T> RecyclerView.setRecyclerAdapter(
4344
@LayoutRes noDataLayout: Int?,
4445
itemListener: Any?,
4546
errorListener: Any?,
46-
noDataListener: Any?
47+
noDataListener: Any?,
48+
useTag: Boolean? = true // use
4749
) {
4850
if (itemLayout != null) {
49-
val tempAdapter = UniversalRecyclerAdapter.Builder(
50-
lifecycleOwner = lifecycleOwner, data = data,
51-
content = UniversalAdapterViewType.Content(itemLayout, itemListener),
52-
loading = UniversalAdapterViewType.Loading(
53-
loadingLayout,
54-
loadingLayoutCount ?: DEFAULT_LOADING_ITEMS
55-
),
56-
loadingFooter = UniversalAdapterViewType.LoadingFooter(loadMoreLayout),
57-
error = UniversalAdapterViewType.Error(errorLayout, errorListener),
58-
noData = UniversalAdapterViewType.NoData(noDataLayout, noDataListener)
59-
).build()
60-
adapter = tempAdapter.getAdapter()
51+
val universalAdapter = tag as? UniversalRecyclerAdapter<T>
52+
if(useTag != false && universalAdapter != null){
53+
data?.let {
54+
universalAdapter.updateData(it)
55+
}
56+
}else {
57+
val tempAdapter = UniversalRecyclerAdapter.Builder(
58+
lifecycleOwner = lifecycleOwner, data = data,
59+
content = UniversalAdapterViewType.Content(itemLayout, itemListener),
60+
loading = UniversalAdapterViewType.Loading(
61+
loadingLayout,
62+
loadingLayoutCount ?: DEFAULT_LOADING_ITEMS
63+
),
64+
loadingFooter = UniversalAdapterViewType.LoadingFooter(loadMoreLayout),
65+
error = UniversalAdapterViewType.Error(errorLayout, errorListener),
66+
noData = UniversalAdapterViewType.NoData(noDataLayout, noDataListener)
67+
).build()
68+
adapter = tempAdapter.getAdapter()
69+
if (useTag != false)
70+
tag = tempAdapter
71+
}
6172
}
6273
}

0 commit comments

Comments
 (0)