





































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
recycler view, recycler list, kotlin, android
Tipologia: Dispense
1 / 45
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!






































cmd+ option + l → indenta codice APPLICARE TEMA SCURO APP 1 CREAZIONE PROGETTO DA ZERO CON RECYCLERVIEW E VIEWMODEL 2 AGGIUNGERE UN ELEMENTO 11 MODIFICA UN ELEMENTO 13 ELIMINA ELEMENTO 15 CREARE UNA TOPBAR 16 AGGIUNGERE LA PROGRESSBAR DI CARICAMENTO 21 AGGIUNGO I PREFERITI 29 AGGIUNGO IL MENU IN BASSO (BOTTOM NAVIGATION) 36
res/values/themes tema scuro
build.gradle(app) android { .. buildFeatures{ viewBinding true } }
manifests
inizializza inflater in mainActivity class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setContentView(R.layout.activity_main) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } } In Android, a quale scopo viene utilizzato il LayoutInflater? Creare un’istanza di un file XML all’interno di una View
recycler nel xml
android:layout_height="wrap_content" android:src="@drawable/edit_icon"/>
import androidx.recyclerview.widget.RecyclerView import com.example.recycler.databinding.ViewProductBinding class ProductAdapter( var products: ArrayList) : RecyclerView.Adapter() { // Metodo chiamato quando viene creato un nuovo ViewHolder override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ViewProductBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ViewHolder(binding) } // Metodo chiamato quando si legano i dati ad un ViewHolder esistente override fun onBindViewHolder(holder: ViewHolder, position: Int) { val product = products[position] holder.bind(product) } // Metodo chiamato per ottenere il numero totale di elementi nella lista override fun getItemCount(): Int { return products.size } // ViewHolder che rappresenta la vista di un singolo elemento nella RecyclerView inner class ViewHolder( private val binding: ViewProductBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(product: Product) { // Effettua il binding dei dati del prodotto alla vista del ViewHolder binding.title.text = product.title binding.description.text = product.description.toString() } } }
private var itemClickCallback: ItemClickCallback? = null fun setOnItemClickCallback(callback: ItemClickCallback) { itemClickCallback = callback } // Metodo chiamato quando viene creato un nuovo ViewHolder override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = ViewProductBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ViewHolder(binding) } // Metodo chiamato quando si legano i dati ad un ViewHolder esistente override fun onBindViewHolder(holder: ViewHolder, position: Int) { val product = products[position] holder.bind(product) holder.itemView.setOnClickListener { itemClickCallback?.onItemClick(position) } } // Metodo chiamato per ottenere il numero totale di elementi nella lista override fun getItemCount(): Int { return products.size } // ViewHolder che rappresenta la vista di un singolo elemento nella RecyclerView inner class ViewHolder( private val binding: ViewProductBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(product: Product) { // Effettua il binding dei dati del prodotto alla vista del ViewHolder binding.title.text = product.title binding.description.text = product.description } } }
package com.example.recycler import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.recycler.ViewModel.ProductAdapter import com.example.recycler.ViewModel.ProductViewModel import com.example.recycler.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private lateinit var recyclerView: RecyclerView private lateinit var productViewModel: ProductViewModel private lateinit var productAdapter: ProductAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setContentView(R.layout.activity_main) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // Inizializzazione del ProductViewModel productViewModel = ProductViewModel() productViewModel.createProduct() val productList = productViewModel.getProducts() /* for (product in productList) { Log.d("Prodotti", "Titolo del prodotto: ${product.title}") } */ //inizializza recycler recyclerView = binding.recyclerView //recyclerView = findViewById(R.id.recyclerView) stessa cosa //inizializza adapter productAdapter = ProductAdapter(ArrayList()) productAdapter.products = productList productAdapter.notifyDataSetChanged()
override fun onItemClick(position: Int) { val product = productAdapter.products[position] Log.d("Cliccato", "Ho cliccato la cella $position $product") val intent = Intent( this @MainActivity, DetailActivity::class.java) intent.putExtra("product", product) startActivity(intent) } })
fun deleteProduct(product: Product) { products.remove(product) } }
topbar con un bottone + che aggiunge un elementio e un cestino che cancella tutti gli elementi in MainActivity
android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
supportActionBar?.title = param.title binding.title.text = param.title binding.description.text = param.description } per far funzionare il tasto back, sotto onCreate //topBar back button override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { android.R.id.home -> { onBackPressed() // Torna alla schermata precedente quando viene selezionato l'elemento home true } else -> super.onOptionsItemSelected(item) } }