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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions