IllegalStateException:在RecyclerView计算布局或滚动时无法调用此方法 [英] IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
本文介绍了IllegalStateException:在RecyclerView计算布局或滚动时无法调用此方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试从我的RecyclerView
中删除一个项目,但是我总是收到错误消息.
I am trying to remove an item from my RecyclerView
, but I always get an error.
java.lang.IllegalStateException:在RecyclerView计算布局或滚动时无法调用此方法
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
我正在使用notifyDataSetChanged()
.我该如何解决?
I am using notifyDataSetChanged()
. How can I solve this?
这是我的适配器代码
public class ListAdapters extends RecyclerView.Adapter<ListAdapters.MyViewHolder> {
public ArrayList<String> tvdatalist;
Context c;
int pos;
ListAdapters.MyViewHolder myViewHolder;
private LayoutInflater layoutInflater;
int[] arr;
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public EditText edttxt;
public CheckBox cb;
public MyViewHolder(View view) {
super(view);
edttxt = (EditText) view.findViewById(R.id.edttxt);
cb = (CheckBox) view.findViewById(R.id.cb);
}
@Override
public void onClick(View v) {
}
}
public ListAdapters(Context c, ArrayList<String> tvdatalist) {
this.c = c;
this.layoutInflater = LayoutInflater.from(c);
this.tvdatalist = tvdatalist;
arr = new int[tvdatalist.size()];
for (int i = 0; i < 20; i++) {
arr[i] = 0;
}
}
@Override
public ListAdapters.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ListAdapters.MyViewHolder(this.layoutInflater.inflate(R.layout.list_ittm, parent, false));
//return new LandingPageAdapter.MyViewHolder(itemView);
}
public void onBindViewHolder(final ListAdapters.MyViewHolder holder, final int position) {
myViewHolder = holder;
final String ShowsBean = tvdatalist.get(position);
myViewHolder.edttxt.setText(ShowsBean);
if (arr[pos] == 0) {
myViewHolder.cb.setChecked(false);
myViewHolder.edttxt.setKeyListener(null);
} else {
myViewHolder.cb.setChecked(true);
myViewHolder.edttxt.setFocusable(true);
}
myViewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (arr[position]==0){
arr[position]=1;
}else{
arr[position]=0;
}
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return tvdatalist.size();
}
public interface ItemClickListener {
void onClick(View view, int position, boolean isLongClick);
}
}
推荐答案
如阿巴斯所说
通常在调用bg线程上的notify时发生.因此,只需将通知移至ui线程
This usually occurs when you are calling notify on bg thread. So just move notify to ui thread
否则,您可以使用notifyItemChanged(position);
else you can use notifyItemChanged(position);
这也将起作用.
这篇关于IllegalStateException:在RecyclerView计算布局或滚动时无法调用此方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文