Implemented In-App Purchases (monthly & yearly subscription plans), integrated REST APIs, and built interactive maps and graph-based data visualizations to enhance user experience and functionality.
@AndroidEntryPoint
class ThirdFragment : Fragment() {
lateinit var binding: FragmentThirdBinding
private lateinit var viewModel: UserViewModel
private lateinit var adapter: UserAdapter
private var currentPage = 1
private val limit = 10
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentThirdBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(this)[UserViewModel::class.java]
intiView()
return binding.root
}
private fun intiView() {
binding.etSearch.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
adapter.filter(s.toString())
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
binding.btnNext.setOnClickListener {
currentPage++
viewModel.loadPosts(currentPage, limit)
Log.e("TAG", "intiView: $currentPage")
}
binding.btnPre.setOnClickListener {
if (currentPage > 1) {
currentPage--
viewModel.loadPosts(currentPage, limit)
Log.e("TAG", "intiView:iiii $currentPage")
}
}
adapter = UserAdapter()
binding.rvData.adapter = adapter
binding.rvData.layoutManager = LinearLayoutManager(requireActivity())
observeData()
viewModel.loadPosts(currentPage, limit)
}
private fun observeData() {
viewModel.posts.observe(requireActivity()) {
adapter.addAll(ArrayList(it))
}
}
}
class UserAdapter : RecyclerView.Adapter<UserAdapter.UserData>() {
private var originalList: List<UserInfo> = emptyList()
private var filteredList: MutableList<UserInfo> = mutableListOf()
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): UserData {
val binding =
UserListDesignBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return UserData(binding)
}
override fun onBindViewHolder(
holder: UserData,
position: Int
) {
val itemData = filteredList[position]
holder.setData(itemData)
}
override fun getItemCount(): Int {
return filteredList.size
}
fun addAll(userList: ArrayList<UserInfo>) {
this.originalList = ArrayList()
this.filteredList = ArrayList()
this.originalList = userList
this.filteredList.addAll(userList)
notifyDataSetChanged()
}
fun filter(query: String) {
if (query.isEmpty()) {
filteredList = originalList.toMutableList()
} else {
filteredList = originalList.filter {
it.title.contains(query, ignoreCase = true)
}.toMutableList()
}
notifyDataSetChanged()
}
class UserData(private val binding: UserListDesignBinding) :
RecyclerView.ViewHolder(binding.root) {
fun setData(data: UserInfo) {
binding.tvTitle.text = data.title
binding.tvDescription.text = data.body
binding.tvId.text = "ID :- ${data.id}"
binding.tvUserId.text = "UserID :- ${data.userId}"
}
}
}
using without Filter Function we can Filter all list in adapter.
Top comments (0)