Untitled

Ini bagian fragmentnya, karena disini saya menggunakan navigation
 avatar
unknown
kotlin
4 years ago
2.9 kB
7
Indexable
package com.example.githubuser.ui

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.githubuser.adapter.ListUserAdapter
import com.example.githubuser.databinding.FragmentHomeBinding
import com.example.githubuser.model.UserItemResponse
import com.example.githubuser.viewmodels.UserViewModel

class HomeFragment : Fragment() {
    private var _binding: FragmentHomeBinding? = null
    private val binding get() = _binding!!

    private val userViewModel: UserViewModel by activityViewModels()
    private val userList = arrayListOf<UserItemResponse>()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val layoutManager = LinearLayoutManager(activity)
        binding.recyclerview.layoutManager = layoutManager
        val itemDecoration = DividerItemDecoration(activity, layoutManager.orientation)
        binding.recyclerview.addItemDecoration(itemDecoration)

        userViewModel.listResponse.observe(viewLifecycleOwner) { setListResponse(it) }
        userViewModel.isLoading.observe(viewLifecycleOwner) { showLoading(it) }
    }

    private fun setListResponse(listResponse: List<UserItemResponse>) {
        for (position in listResponse.indices) {
            userViewModel.getDetailResponse(listResponse[position].login)
        }

        userViewModel.detailResponse.observe(viewLifecycleOwner) { setDetailResponse(it) }
    }

    private fun setDetailResponse(detailResponse: UserItemResponse) {
        userList.add(
            UserItemResponse(
                detailResponse.followers,
                detailResponse.avatarUrl,
                detailResponse.following,
                detailResponse.name,
                detailResponse.company,
                detailResponse.location,
                detailResponse.id,
                detailResponse.publicRepos,
                detailResponse.login,
                detailResponse.email
            )
        )

        val adapter = ListUserAdapter(userList)
        binding.recyclerview.adapter = adapter
    }

    private fun showLoading(isLoading: Boolean) {
        binding.progressBar.visibility = if (isLoading) View.VISIBLE else View.GONE
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}
Editor is loading...