Comment faire pour supprimer l'élément de la recyclerView dans android

Dans mon application, je devrais utiliser recyclerView et supprimer certains éléments.

Je veux supprimer certains éléments de recyclerview et pour cela, je écrire de code ci-dessous dans Adaptateur :

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private List<TvTonightResult> model;
public MyAdapter (Context context, List<TvTonightResult> model) {
this.context = context;
this.model = model;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_tv_tonight, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, final int position) {
holder.tvTonightTitle.setText(Html.fromHtml(model.get(position).getName()));
Glide.with(context)
.load(model.get(position).getImageUrl())
.placeholder(R.drawable.default_image)
.override(600, 900)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model,
Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(holder.tvTonightImage);
long time = 5 * 1000;
holder.tvTonightTimeCounter.start(time);
holder.tvTonightTimeCounter.setOnCountdownEndListener(new CountdownView.OnCountdownEndListener() {
@Override
public void onEnd(CountdownView cv) {
removeItem(position);
}
});
}
@Override
public int getItemCount() {
return 4;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView tvTonightImage, tvTonightChannel;
private TextView tvTonightTitle, tvTonightDate;
private CountdownView tvTonightTimeCounter;
public ViewHolder(View itemView) {
super(itemView);
tvTonightImage = (ImageView) itemView.findViewById(R.id.row_tvTonightImage);
tvTonightChannel = (ImageView) itemView.findViewById(R.id.row_tvTonightChannelImage);
tvTonightTitle = (TextView) itemView.findViewById(R.id.row_tvTonightTitle);
tvTonightTimeCounter = (CountdownView) itemView.findViewById(R.id.row_tvTonightTime);
}
}
private void removeItem(int position) {
model.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, model.size());
}
}

Je veux quand exécuter ce code, supprimer élément :

holder.tvTonightTimeCounter.setOnCountdownEndListener(new CountdownView.OnCountdownEndListener() {
@Override
public void onEnd(CountdownView cv) {
removeItem(position);
}
});

Mais montrez-moi ce erreur :

FATAL EXCEPTION: main
Process: com.example.app, PID: 9711
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.remove(ArrayList.java:477)
at com.example.app.Adapters.TvTonightAdapter.removeItem(TvTonightAdapter.java:102)
at com.example.app.Adapters.TvTonightAdapter.access$300(MyAdapter.java:29)
at com.example.app.Adapters.TvTonightAdapter$2.onEnd(MyAdapter.java:74)
at com.example.app.Utils.Componenets.CountDownTimer.CountdownView$1.onFinish(CountdownView.java:129)
at com.example.app.Utils.Componenets.CountDownTimer.CustomCountDownTimer$1.handleMessage(CustomCountDownTimer.java:74)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

Comment puis-je corriger cette erreur et supprimer l'élément de la recyclerview?

OriginalL'auteur Kol | 2017-06-05