[英]How to refresh recyclerView when item deleted?
我有KelimeleriGoster.class
。 將添加的單詞添加到數據庫中。 這個類中有recyclerview項。
當我點擊刪除按鈕時,我想實時刪除。 我想自動刷新我的列表
KelimeleriGoster.class
package com.tcoding.kelimeezberletici;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.tcoding.kelimeezberletici.Adapter.KelimeleriGosterAdapter;
import com.tcoding.kelimeezberletici.KelimeEkle.KelimeEkle;
import com.tcoding.kelimeezberletici.Sınıflar.Kelimeler;
import com.tcoding.kelimeezberletici.Veritabani.Veritabani;
import com.tcoding.kelimeezberletici.Veritabani.VeritabaniDao;
import java.util.ArrayList;
public class KelimeleriGoster extends AppCompatActivity {
private RecyclerView rv;
private FloatingActionButton floatingActionButton;
private ArrayList<Kelimeler> kelimelerArrayList;
private KelimeleriGosterAdapter adapter;
private Veritabani vt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kelimeleri_goster);
rv = findViewById(R.id.rv);
floatingActionButton = findViewById(R.id.floatingActionButton);
vt = new Veritabani(this);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(this));
kelimelerArrayList = new VeritabaniDao().kelimeleriGoster(vt);
adapter = new KelimeleriGosterAdapter(this,kelimelerArrayList);
rv.setAdapter(adapter);
adapter.notifyDataSetChanged();
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(KelimeleriGoster.this,KelimeEkle.class));
finish();
}
});
}
}
還有我的適配器。 要在 recyclerview 上顯示數據.. 當我單擊刪除按鈕時,我想將我的單詞列表刷新為實時狀態。 喜歡liveData
KelimeleriGosterAdapter.class
package com.tcoding.kelimeezberletici.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.tcoding.kelimeezberletici.R;
import com.tcoding.kelimeezberletici.Sınıflar.Kelimeler;
import com.tcoding.kelimeezberletici.Veritabani.Veritabani;
import com.tcoding.kelimeezberletici.Veritabani.VeritabaniDao;
import org.w3c.dom.Text;
import java.util.ArrayList;
public class KelimeleriGosterAdapter extends RecyclerView.Adapter<KelimeleriGosterAdapter.KelimeViewHolder> {
private Context context;
private ArrayList<Kelimeler> kelimelerArrayList;
private Veritabani vt ;
public KelimeleriGosterAdapter(Context context, ArrayList<Kelimeler> kelimelerArrayList) {
this.context = context;
this.kelimelerArrayList = kelimelerArrayList;
}
@NonNull
@Override
public KelimeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardviewdeneme,parent,false);
return new KelimeViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull KelimeViewHolder holder, int position) {
final Kelimeler k = kelimelerArrayList.get(position);
holder.textViewEng.setText(k.getIngilizce());
holder.textViewTr.setText(k.getTurkce());
holder.buttonSil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vt = new Veritabani(context);
//Sil dedigimizde ogrenilen kelimelere eklenecek o yuzden tanımlamalar yapılmalı
String ingilizce = k.getIngilizce();
String turkce = k.getTurkce();
new VeritabaniDao().bildigimKelimelereEkle(vt,ingilizce,turkce);//For the add another database
// Ekleme yapıldı idsi alınarak silme işlemi yapılmalı(Data Add)
String id = String.valueOf(k.getId());
//to delete data
new VeritabaniDao().sil(vt,id);
}
});
}
@Override
public int getItemCount() {
return kelimelerArrayList.size();
}
public class KelimeViewHolder extends RecyclerView.ViewHolder {
private TextView textViewEng,textViewTr;
private Button buttonSil;
public KelimeViewHolder(@NonNull View itemView) {
super(itemView);
textViewEng = itemView.findViewById(R.id.textViewEng);
textViewTr = itemView.findViewById(R.id.textViewTr);
buttonSil = itemView.findViewById(R.id.buttonSil);
}
}
}
我該怎么做
你需要先更新你的列表變量(kelimelerArrayList)然后使用“notifyItemRemoved(position)”按照這個答案https://stackoverflow.com/a/38000604/3916792
您可以為此使用 diffUtil 類。在您的適配器類中添加 diffUtil 調用將在您從列表中刪除某些內容時處理動畫,並在刪除項目時自動更新視圖。 以下是如何在適配器中使用 diffUtils 類的示例:
class RunAdapter: RecyclerView.Adapter<RunAdapter.RunViewHolder>() {
inner class RunViewHolder(itemView: View):RecyclerView.ViewHolder(itemView)
private val diffCallBack = object : DiffUtil.ItemCallback<Run>(){
override fun areItemsTheSame(oldItem: Run, newItem: Run): Boolean {
return oldItem.primaryKey == newItem.primaryKey
}
override fun areContentsTheSame(oldItem: Run, newItem: Run): Boolean {
return oldItem.hashCode()==newItem.hashCode()
}
}
private val differ = AsyncListDiffer(this,diffCallBack)
//use this function for submitting your list to adapter class
fun submitList(listRun:List<Run>) = differ.submitList(listRun)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RunViewHolder {
return RunViewHolder(LayoutInflater.from(parent.context).inflate(
R.layout.item_run,
parent,
false
))
}
override fun getItemCount(): Int {
return differ.currentList.size
}
override fun onBindViewHolder(holder: RunViewHolder, position: Int) {
val run = differ.currentList[position]
holder.itemView.apply {
//set your view's here.
}
}
}
這是一個java示例,根據您的需要修改它:
public class RecyclerViewAdaptar extends ListAdapter<EntityTableNotes, RecyclerViewHolder> {
private RecyclerItemTouchListner mListner;
public RecyclerViewAdaptar() {
super(diffCallBack);
}
private static final DiffUtil.ItemCallback<EntityTableNotes> diffCallBack = new DiffUtil.ItemCallback<EntityTableNotes>() {
@Override
public boolean areItemsTheSame(@NonNull EntityTableNotes oldItem, @NonNull EntityTableNotes newItem) {
return oldItem.getNoteId() == newItem.getNoteId();
}
@Override
public boolean areContentsTheSame(@NonNull EntityTableNotes oldItem, @NonNull EntityTableNotes newItem) {
return oldItem.getNoteTitle().equals(newItem.getNoteTitle()) &&
oldItem.getNoteBody().equals(newItem.getNoteBody()) &&
oldItem.getNotePriority() == newItem.getNotePriority();
}
};
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new RecyclerViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.singleitemgrid, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerViewHolder holder, final int position) {
holder.noteTitle.setText(getItem(position).getNoteTitle());
}
在活動/片段中使用 adapter.submitList(yourList) 提交適配器內的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.