Skip to content

Commit d027979

Browse files
chauhan shivchauhan shiv
authored andcommitted
Display list of user in recycler, adapter class, divider decorator
1 parent 2c84415 commit d027979

File tree

4 files changed

+113
-1
lines changed

4 files changed

+113
-1
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.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.app.slideusers.presentation.ui.feature_user_list.adapter
2+
3+
import android.view.LayoutInflater
4+
import android.view.ViewGroup
5+
import androidx.recyclerview.widget.RecyclerView
6+
import com.app.slideusers.databinding.ItemUserBinding
7+
import com.app.slideusers.domain.model.UserModel
8+
9+
class UserListAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
10+
11+
var dataList : List<UserModel> = emptyList()
12+
13+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
14+
return UserViewHolder(
15+
ItemUserBinding.inflate(
16+
LayoutInflater.from(
17+
parent.context
18+
), parent, false
19+
)
20+
)
21+
}
22+
23+
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
24+
(holder as UserViewHolder).bind(dataList[position])
25+
}
26+
27+
override fun getItemCount(): Int {
28+
return dataList.size
29+
}
30+
31+
fun setData(dataList : List<UserModel>){
32+
this.dataList = dataList
33+
notifyDataSetChanged()
34+
}
35+
36+
inner class UserViewHolder( private val itemViewBinding: ItemUserBinding) :
37+
RecyclerView.ViewHolder(itemViewBinding.root) {
38+
fun bind(item: UserModel) {
39+
itemViewBinding.tvName.text = item.name
40+
itemViewBinding.tvEmail.text = item.email
41+
}
42+
}
43+
44+
}

app/src/main/java/com/app/slideusers/presentation/ui/feature_user_list/fragments/UserListFragment.kt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,22 @@ import android.view.View
77
import android.view.ViewGroup
88
import androidx.fragment.app.viewModels
99
import androidx.lifecycle.Observer
10+
import androidx.recyclerview.widget.LinearLayoutManager
11+
import androidx.recyclerview.widget.RecyclerView
1012
import com.app.slideusers.R
1113
import com.app.slideusers.databinding.UserListFragmentBinding
14+
import com.app.slideusers.presentation.ui.feature_user_list.adapter.UserListAdapter
1215
import com.app.slideusers.presentation.ui.feature_user_list.viewmodels.UserListViewModel
1316
import dagger.hilt.android.AndroidEntryPoint
17+
import androidx.recyclerview.widget.DividerItemDecoration
18+
1419

1520
@AndroidEntryPoint
1621
class UserListFragment : Fragment() {
1722

1823
private val viewModel: UserListViewModel by viewModels()
1924
private lateinit var binding: UserListFragmentBinding
25+
private lateinit var userListAdapter: UserListAdapter
2026

2127
override fun onCreateView(
2228
inflater: LayoutInflater, container: ViewGroup?,
@@ -30,18 +36,38 @@ class UserListFragment : Fragment() {
3036
super.onViewCreated(view, savedInstanceState)
3137
viewModel.getUserList()
3238
subscribeObservers()
39+
setUpAdapter()
3340
}
3441

3542
private fun subscribeObservers() {
3643
viewModel.responseUserList.observe(viewLifecycleOwner, { result ->
3744
if (result.isLoading) {
3845

3946
} else if (result.userList.isNotEmpty()) {
40-
47+
if (userListAdapter != null)
48+
userListAdapter.setData(result.userList)
4149
} else {
4250

4351
}
4452
})
4553
}
4654

55+
private fun setUpAdapter() {
56+
userListAdapter = UserListAdapter()
57+
LinearLayoutManager(
58+
requireContext(),
59+
RecyclerView.VERTICAL,
60+
false
61+
).apply {
62+
binding.rvUserList.layoutManager = this
63+
binding.rvUserList.addItemDecoration(
64+
DividerItemDecoration(
65+
binding.rvUserList.context,
66+
orientation
67+
)
68+
)
69+
}
70+
binding.rvUserList.adapter = userListAdapter
71+
}
72+
4773
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
xmlns:app="http://schemas.android.com/apk/res-auto"
5+
android:id="@+id/container"
6+
android:layout_width="match_parent"
7+
android:layout_height="wrap_content">
8+
9+
<androidx.appcompat.widget.AppCompatTextView
10+
android:id="@+id/tvName"
11+
app:layout_constraintTop_toTopOf="parent"
12+
app:layout_constraintStart_toStartOf="parent"
13+
android:layout_width="wrap_content"
14+
android:padding="20dp"
15+
android:text="Name"
16+
android:layout_height="wrap_content">
17+
</androidx.appcompat.widget.AppCompatTextView>
18+
19+
<androidx.appcompat.widget.AppCompatTextView
20+
android:id="@+id/tvEmail"
21+
app:layout_constraintTop_toBottomOf="@+id/tvName"
22+
app:layout_constraintStart_toStartOf="parent"
23+
android:layout_width="wrap_content"
24+
android:paddingStart="20dp"
25+
android:paddingBottom="20dp"
26+
android:text="Email"
27+
android:layout_height="wrap_content">
28+
</androidx.appcompat.widget.AppCompatTextView>
29+
30+
<androidx.appcompat.widget.AppCompatTextView
31+
android:id="@+id/tvTime"
32+
app:layout_constraintTop_toTopOf="parent"
33+
app:layout_constraintEnd_toEndOf="parent"
34+
app:layout_constraintBottom_toBottomOf="parent"
35+
android:layout_width="wrap_content"
36+
android:paddingEnd="20dp"
37+
android:text="xx"
38+
android:layout_height="wrap_content">
39+
</androidx.appcompat.widget.AppCompatTextView>
40+
41+
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)