Skip to content

보유중인 농장 아이템 클릭 에러 #93

@KJ-Hyeon

Description

@KJ-Hyeon

-- Adapter --
package com.example.farmus_application.ui.farm

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.farmus_application.R
import com.example.farmus_application.databinding.RvMyFarmItemBinding
import com.example.farmus_application.model.farm.myfarm.MyFarmItem

class MyFarmRVAdapter(val onClick: (MyFarmItem) -> Unit) : ListAdapter<MyFarmItem, MyFarmRVAdapter.ViewHolder>(diffUtil) {

private lateinit var binding : RvMyFarmItemBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    binding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.rv_my_farm_item, parent, false )
    return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bind(currentList[position])
}

inner class ViewHolder(private val binding: RvMyFarmItemBinding) : RecyclerView.ViewHolder(binding.root) {
    fun bind(item : MyFarmItem){
        binding.myFarmItem = item

        if (item.Picture_url == null) {
            Glide.with(binding.ivItemImg)
                .load(R.drawable.farm_image_example)
                .centerCrop()
                .into(binding.ivItemImg)

        } else {
            Glide.with(binding.ivItemImg)
                .load(item.Picture_url)
                .centerCrop()
                .into(binding.ivItemImg)
        }

        binding.root.setOnClickListener {
            onClick(item)
        }
    }
}
companion object{
    val diffUtil = object: DiffUtil.ItemCallback<MyFarmItem>(){
        override fun areItemsTheSame(
            oldItem: MyFarmItem,
            newItem: MyFarmItem
        ): Boolean {
            return oldItem.FarmID == newItem.FarmID
        }

        override fun areContentsTheSame(
            oldItem: MyFarmItem,
            newItem: MyFarmItem
        ): Boolean {
            return oldItem == newItem
        }

    }
}

}

-- Fragment --
package com.example.farmus_application.ui.farm

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.farmus_application.databinding.FragmentFarmTab2Binding
import com.example.farmus_application.repository.UserPrefsStorage
import com.example.farmus_application.ui.MainActivity
import com.example.farmus_application.ui.account.EnrollFarmerFragment
import com.example.farmus_application.utilities.JWTUtils
import com.example.farmus_application.viewmodel.farm.FarmListViewModel

// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**

  • A simple [Fragment] subclass.

  • Use the [MyFarmListFragment.newInstance] factory method to

  • create an instance of this fragment.
    */
    class MyFarmListFragment : Fragment() {

    private lateinit var binding: FragmentFarmTab2Binding
    private lateinit var farmListViewModel: FarmListViewModel

    // TODO: Rename and change types of parameters
    private var param1: String? = null
    private var param2: String? = null
    private val jwtToken = UserPrefsStorage.accessToken
    // 농장주가 아니면 리스트 자체를 요청할 필요가 없다 (C: client, F: Farmer)
    private val role = JWTUtils.decoded(jwtToken.toString())?.tokenBody?.role ?: ""

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
    param1 = it.getString(ARG_PARAM1)
    param2 = it.getString(ARG_PARAM2)
    }
    }

    override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
    ): View {
    // Inflate the layout for this fragment
    binding = FragmentFarmTab2Binding.inflate(layoutInflater, container, false)
    farmListViewModel = ViewModelProvider(this)[FarmListViewModel::class.java]

     return binding.root
    

    }

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

     viewVisibility(role)
    
     Log.e("UserToken:","$jwtToken")
     farmListViewModel.getMyFarmList()
    
     val myFarmAdapter = MyFarmRVAdapter() {
         val farmerFarmDetailFragment = FarmerFarmDetailFragment()
         val bundle = Bundle().apply {
             putInt("farmId",it.FarmID)
         }
         farmerFarmDetailFragment.arguments = bundle
         (activity as MainActivity).changeFragmentAddToBackStack(farmerFarmDetailFragment)
     }
    
     farmListViewModel.myFarmRes.observe(viewLifecycleOwner) { response ->
         Log.e("myFarmRes:","$response")
         myFarmAdapter.submitList(response.myFarmList)
     }
    
     binding.rvTab2.apply {
         adapter = myFarmAdapter
         layoutManager = LinearLayoutManager(requireContext())
     }
    
     binding.emptyMyFarmButton.setOnClickListener {
         (activity as MainActivity).changeFragmentAddToBackStack(EnrollFarmerFragment())
     }
    

    }

    private fun viewVisibility(role: String) {
    if (role == "C") {
    binding.emptyMyFarmText.visibility = View.VISIBLE
    binding.emptyMyFarmButton.visibility = View.VISIBLE
    binding.rvTab2.visibility = View.GONE
    binding.floatingActionButton.visibility = View.GONE
    } else {
    binding.emptyMyFarmText.visibility = View.GONE
    binding.emptyMyFarmButton.visibility = View.GONE
    binding.rvTab2.visibility = View.VISIBLE
    binding.floatingActionButton.visibility = View.VISIBLE
    }
    }

    companion object {
    /**
    * Use this factory method to create a new instance of
    * this fragment using the provided parameters.
    *
    * @param param1 Parameter 1.
    * @param param2 Parameter 2.
    * @return A new instance of fragment Tab2Fragment.
    */
    // TODO: Rename and change types and number of parameters
    @JvmStatic
    fun newInstance(param1: String, param2: String) =
    MyFarmListFragment().apply {
    arguments = Bundle().apply {
    putString(ARG_PARAM1, param1)
    putString(ARG_PARAM2, param2)
    }
    }
    }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions