Gestión de datos en un RecyclerView
Cómo borrar y añadir datos
Añadir y borrar items:
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="red">#FF0D0D</color>
</resources>
item_superhero.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
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_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivSuperHero"
android:layout_width="150dp"
android:layout_height="150dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/tvSuperHeroName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="21sp"
android:textStyle="bold"
android:textColor="@color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/ivSuperHero"
app:layout_constraintTop_toTopOf="parent"
tools:text="KotlinMan" />
<TextView
android:id="@+id/tvRealName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/ivSuperHero"
app:layout_constraintTop_toBottomOf="@+id/tvSuperHeroName"
tools:text="Julio" />
<TextView
android:id="@+id/tvPublisher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:text="Hola" />
<Button
android:id="@+id/btnDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:backgroundTint="@color/red"
android:text="BORRAR :("
app:layout_constraintStart_toEndOf="@+id/ivSuperHero" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
SuperHeroViewHolder.kt
class SuperHeroViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val binding = ItemSuperheroBinding.bind(view)
fun render(
superHeroModel: SuperHero,
onClickListener: (SuperHero) -> Unit,
onClickDelete: (Int) -> Unit
) {
binding.tvSuperHeroName.text = superHeroModel.superhero
binding.tvRealName.text = superHeroModel.realName
binding.tvPublisher.text = superHeroModel.publisher
// Glide.with(binding.ivSuperHero.context).load(superHeroModel.photo).into(binding.ivSuperHero)
Picasso.get().load(superHeroModel.photo).into(binding.ivSuperHero);
itemView.setOnClickListener {
onClickListener(superHeroModel)
}
binding.btnDelete.setOnClickListener { onClickDelete(adapterPosition) }
}
}
SuperHeroAdapter.kt
class SuperHeroAdapter(
private val superheroList: List<SuperHero>,
private val onClickListener: (SuperHero) -> Unit,
private val onClickDelete: (Int) -> Unit
) : RecyclerView.Adapter<SuperHeroViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuperHeroViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return SuperHeroViewHolder(layoutInflater.inflate(R.layout.item_superhero, parent, false))
}
override fun onBindViewHolder(holder: SuperHeroViewHolder, position: Int) {
val item = superheroList[position]
holder.render(item, onClickListener, onClickDelete)
}
override fun getItemCount(): Int {
return superheroList.size
}
}
activity_main.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=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerSuperHero"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/btnAddSuperHero"
android:layout_width="295dp"
android:layout_height="56dp"
android:layout_gravity="bottom"
android:layout_marginBottom="31dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="New SuperHero" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private var superHeroMutableList: MutableList<SuperHero> = SuperHeroProvider.superHeroList.toMutableList()
private lateinit var adapter: SuperHeroAdapter
private val llmanager = LinearLayoutManager(this)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnAddSuperHero.setOnClickListener { createSuperHero() }
initRecyclerView()
}
private fun createSuperHero() {
val superHero = SuperHero(
"New SuperHero",
"Aristides Corporation",
"?",
"https://pbs.twimg.com/profile_images/1037281659727634432/5x2XVPwB_400x400.jpg")
superHeroMutableList.add(3, superHero)
adapter.notifyItemInserted(3)
// adapter.notifyItemInserted(superHeroMutableList.size - 1)
llmanager.scrollToPositionWithOffset(3, 20)
}
private fun initRecyclerView() {
adapter = SuperHeroAdapter(
superheroList = superHeroMutableList,
onClickListener = { superHero -> onItemSelected(superHero) },
onClickDelete = {position -> onDeletedIem(position)}
)
// val manager = LinearLayoutManager(this)
// val decoration = DividerItemDecoration(this, manager.orientation)
val decoration = DividerItemDecoration(this, llmanager.orientation)
binding.recyclerSuperHero.layoutManager = llmanager
// binding.recyclerSuperHero.adapter = SuperHeroAdapter(SuperHeroProvider.superHeroList) { superHero -> onItemSelected(superHero) }
binding.recyclerSuperHero.adapter = adapter
binding.recyclerSuperHero.addItemDecoration(decoration)
}
private fun onDeletedIem(position: Int) {
superHeroMutableList.removeAt(position)
adapter.notifyItemRemoved(position)
}
private fun onItemSelected(superHero: SuperHero) {
Toast.makeText(this, superHero.superhero, Toast.LENGTH_SHORT).show()
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(superHero.photo))
startActivity(intent)
}
}
Filtrar datos:
Código en GitHub: Filter RecyclerView
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.