What should I add in my code so that every time I check one of the recycler view's items it will display his number of calories? I wanna make a "checkListener" so that every time I check the checkbox corresponding to the selected item of the recyclerview ... his calories number will be stored in a variable and if I check for example 2 of these items the variable will store their sum
AdapterItem:
class AdapterItem( val userList: List<MyDataItem>): RecyclerView.Adapter<AdapterItem.ViewHolder>() {
class ViewHolder(itemView: View):RecyclerView.ViewHolder(itemView){
var numeLista: TextView
var caloriiLista: TextView = itemView.findViewById(R.id.caloriiLista)
init{
numeLista=itemView.numeLista
caloriiLista=itemView.caloriiLista
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
var itemView = LayoutInflater.from(parent.context).inflate(R.layout.row_items, parent, false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.numeLista.text=userList[position].foodItems.get(0).foodName
holder.caloriiLista.text=userList[position].foodItems.get(0).calories.toString()
}
override fun getItemCount(): Int {
return userList.size
}
}
**The fragment where the Recycle is displayed:**
const val BASE_URL= "https://raw.githubusercontent.com/terrenjpeterson/caloriecounter/master/src/data/"
class InformationFragment : Fragment() {
private var binding: FragmentInformationBinding? = null
private val sharedViewModel: SharedViewModel by activityViewModels()
lateinit var adapterItem: AdapterItem
lateinit var linearLayoutManager: LinearLayoutManager
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
getMyData()
val fragmentBinding = FragmentInformationBinding.inflate(inflater, container, false)
binding = fragmentBinding
return fragmentBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
linearLayoutManager = LinearLayoutManager(this.context)
recyclerview_lista.setHasFixedSize(true)
recyclerview_lista.layoutManager = linearLayoutManager
binding?.apply {
viewModel = sharedViewModel
informationFragment = this@InformationFragment
lifecycleOwner = viewLifecycleOwner
}
}
private fun getMyData() {
val retrofitBuilder = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(ApiInterface::class.java)
val retrofitData = retrofitBuilder.getData()
retrofitData.enqueue(object : Callback<List<MyDataItem>?> {
override fun onResponse(
call: Call<List<MyDataItem>?>,
response: Response<List<MyDataItem>?>
) {
val responseBody = response.body()!!
adapterItem = AdapterItem(responseBody)
adapterItem.notifyDataSetChanged()
recyclerview_lista.adapter=adapterItem
}
override fun onFailure(call: Call<List<MyDataItem>?>, t: Throwable) {
d("informationFragment", "onFailure: " + t.message)
}
})
}
}
**Fragment XML**
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".InformationFragment"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview_lista"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="40dp"/>
<TextView
android:id="@+id/activitate_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:padding="8dp"
android:text="@{@string/ramase+viewModel.ideal.toString()}"
android:textSize="18dp"
app:layout_constraintTop_toTopOf="@id/recyclerview_lista"
tools:ignore="MissingConstraints"
android:layout_marginTop="-40dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
**row_items XML:**
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/numeLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10sp"
android:text="Nume"
android:textSize="20sp">
</TextView>
<TextView
android:id="@+id/caloriiLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10sp"
android:text="calorii"
android:textSize="20sp">
</TextView>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>