0

Hi I have an simple app with Bottom Navigation Activity. In Home Fragment I have a Button called Fruits. It opens a PopupWindow. In the popup is a RecyclerView with 4 Buttons(fruits names).

I want, when I press on a Button in the PopupWindow, to change the name of Button(called Fruits) form home_fragment, in whatever fruit was chosen.

HomeFragment:

class HomeFragment : Fragment() {
    private var _binding: FragmentHomeBinding? = null
    private val binding get() = _binding!!
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        val root: View = binding.root
        return root
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.Fruits.setOnClickListener {
            show_popup(requireContext(), view, R.layout.fruits_popup)
        }
    }
    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
    fun show_popup(c: Context, v: View, l: Int){
        val popup_window = PopupWindow(c)
        val inflater = layoutInflater.inflate(l, null)
        val recyclerView: RecyclerView = inflater.findViewById(R.id.recycler_view)
        recyclerView.layoutManager = LinearLayoutManager(context)
        recyclerView.adapter = FruitsAdapter()
        popup_window.contentView = inflater
        popup_window.isFocusable = true
        popup_window.isOutsideTouchable = true
        popup_window.showAtLocation(v, Gravity.CENTER, 0, 0)
    }
}

FruitsAdapter:

class FruitsAdapter : RecyclerView.Adapter<FruitsAdapter.FruitsViewHolder>() {
    private val list = listOf<String>("Banana", "Orange", "Apple", "Watermelon")

    class FruitsViewHolder(val view: View): RecyclerView.ViewHolder(view) {
        val button = view.findViewById<Button>(R.id.fruit)
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FruitsViewHolder {
        val layout = LayoutInflater.from(parent.context).inflate(R.layout.fruit, parent, false)
        return FruitsViewHolder(layout)
    }
    override fun onBindViewHolder(holder: FruitsViewHolder, position: Int) {
        val item = list.get(position)
        holder.button.text = item.toString()
    }
    override fun getItemCount(): Int {
        return list.size
    }
}

fragment_gome.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.home.HomeFragment">

    <Button
        android:id="@+id/Fruits"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fruits"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.254" />
</androidx.constraintlayout.widget.ConstraintLayout>

fruits_popup.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"/>

</FrameLayout>

fruit.xml

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fruit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:padding="8dp" />
  • if i understood correctly you want to change the text of home fragment button to what ever option was selected inside your popup window recyclerview? if that's the case you could explore interface in recyclerview and implement it in your fragment what ever option is selected will be available to you in you home fragment. [Accepted answer](https://stackoverflow.com/questions/49969278/recyclerview-item-click-listener-the-right-way) here is the one you are looking for. – Malik Saifullah Sep 12 '22 at 19:35

0 Answers0