1

I have a category item in my recyclerView. There is a TextView and two ImageView as button (Edit button and Delete button). When I click edit button I want to change TextView to EditText and editbutton change for agreebutton. When I write new text just update my old one. I show you what I have and almost everything working but don't update my new text and I know code don't look nice and maybe someone can show me how to do it better :)

class CategoryAdapter(private val categoryList: List<Category>, val listener: ClickListener) : RecyclerView.Adapter<CategoryAdapter.MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
       return MyViewHolder(CategoryItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.binding.categoryName.text = categoryList[position].name
        holder.binding.categoryEditIv.setOnClickListener {
            holder.binding.categoryName.visibility = View.GONE
            holder.binding.categoryEditName.visibility = View.VISIBLE
            holder.binding.categoryEditName.setText(categoryList[position].name)
            holder.binding.categoryEditIv.visibility = View.GONE
            holder.binding.categoryAgreeIv.visibility = View.VISIBLE

        }
        val editTxt = holder.binding.categoryEditName
        holder.binding.categoryAgreeIv.setOnClickListener {
            val edit = editTxt.text.toString()
            listener.editAgreeClickItem(edit)
            holder.binding.categoryName.visibility = View.VISIBLE
            holder.binding.categoryEditName.visibility = View.GONE
            holder.binding.categoryAgreeIv.visibility = View.GONE
            holder.binding.categoryEditIv.visibility = View.VISIBLE
        }
        holder.binding.categoryDeleteIv.setOnClickListener {
            listener.deleteClickItem(categoryList[position])
        }
    }

    override fun getItemCount(): Int {
        return categoryList.size
    }

    class MyViewHolder(val binding: CategoryItemBinding) : RecyclerView.ViewHolder(binding.root)

    interface ClickListener {
        fun editAgreeClickItem(text: String)
        fun deleteClickItem(category: Category)
    }
}
class MainFragment : Fragment(), NewCategory.NewCategoryCreateListener, CategoryAdapter.ClickListener {

    private var _binding: FragmentMainBinding? = null
    private val binding
        get() = _binding!!

    private lateinit var shoppingListViewModel: ShoppingListViewModel
    private lateinit var categoryAdapter: CategoryAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        shoppingListViewModel = ViewModelProvider(requireActivity())[ShoppingListViewModel::class.java]
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentMainBinding.inflate(layoutInflater,container,false)


        return binding.root
    }

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



        binding.categoryRV.layoutManager = LinearLayoutManager(requireContext())
        shoppingListViewModel.allCategories.observe(viewLifecycleOwner, {
                updateCategories(it)
        })

        binding.addCategory.setOnClickListener {
            val newCategory = NewCategory(this)
            newCategory.show(childFragmentManager, "NewCategory")
        }
    }


    private fun updateCategories(list: List<Category>) {
        if(list.size == 0){
            binding.noResult.visibility = View.VISIBLE
            binding.categoryRV.visibility = View.GONE
        }else{
            binding.noResult.visibility = View.GONE
            binding.categoryRV.visibility = View.VISIBLE
            categoryAdapter = CategoryAdapter(list, this)
            binding.categoryRV.adapter = categoryAdapter
        }
    }

    override fun newCategoryCreate(text: String) {
        val newCat = Category(text)
        shoppingListViewModel.insertCategory(newCat)
    }


    override fun editAgreeClickItem(text: String) {
        val newText = Category(text)
        shoppingListViewModel.updateCategory(newText)
    }

    override fun deleteClickItem(category: Category) {
        shoppingListViewModel.deleteCategory(category)
    }

}
Matt
  • 33
  • 5

0 Answers0