notifydatasetchanged不是从异步任务工作
您好我想我的问题是有关这个notifyDataSetChanged not working on RecyclerView 我尝试从一个异步任务刷新我的布局,但是当IM调用通知datasetchanged什么也不会发生,但如果我创建适配器的新实例和调用notifydatasetchanged那么它的工作香港专业教育学院尝试了一些东西没有用,不知道什么即时通讯做错了,notifydatasetchanged不是从异步任务工作
我像这样引用它
public ListAdapter cardAdapter;
那么的onCreate我初始化一切与我的回收观点做, (这里唯一需要的是我如何初始化我的适配器bu吨清晰生病添加的一切与我的回收以做)
staggeredGridLayoutManagerVertical = new
customLinearLayoutManager(this,customLinearLayoutManager.VERTICAL,false);
recyclerView = (RecyclerView) findViewById(R.id.list_view);
OnItemTouchListener itemTouchListener = new
FinalListActivity.OnItemTouchListener() {
@Override
public void onCardClick(View view, int position) {
//removeAt(position);
list.remove(position);
cardAdapter.notifyItemRemoved(position);
}
@Override
public void onCardLongClick(View view, int position) {
//clearGrid();
}
};
cardAdapter = new ListAdapter(list,this,itemTouchListener);
recyclerView.setLayoutManager(staggeredGridLayoutManagerVertical);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(cardAdapter);
//cardAdapter.notifyDataSetChanged();
ItemTouchHelper.Callback callback =
new SimpleItemTouchHelperCallback(cardAdapter);
mItemTouchHelper = new ItemTouchHelper(callback);
mItemTouchHelper.attachToRecyclerView(recyclerView);
,如果我将项目添加到列表中,则这些方法我回收视图显示的信息,但我想要的是抢在异步任务的信息之前,并在onPostExecute中填充列表,但是当我拨打
cardAdapter.notifyDataSetChanged();
from onPostExecute没有任何反应,任何帮助?
编辑 添加适配器
public class ListAdapter extends
RecyclerView.Adapter<ListAdapter.MyViewHolder>
implements ItemTouchHelperAdapter{
private List<String> cardMakerList;
private OnStartDragListener mDragStartListener;
private FinalListActivity.OnItemTouchListener onItemTouchListener;
public class MyViewHolder extends RecyclerView.ViewHolder{
public EditText cardText;
public ImageView close;
public ContentLoadingProgressBar progress;
public ImageView handleView;
public RelativeLayout cardBack;
public MyViewHolder(View view){
super(view);
cardText = (EditText) view.findViewById(R.id.cardText);
close = (ImageView) view.findViewById(R.id.close);
cardBack =(RelativeLayout)view.findViewById(R.id.cardLayout);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemTouchListener.onCardClick(v, getPosition());
}
});
/*
close.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onItemTouchListener.onCardLongClick(v, getPosition());
return true;
}
});
*/
progress = (ContentLoadingProgressBar)
view.findViewById(R.id.progress);
handleView = (ImageView)view.findViewById(R.id.handle);
}
}
public ListAdapter(List<String> cardMakerList,OnStartDragListener
dragStartListener,FinalListActivity.OnItemTouchListener onItemTouchListener)
{
this.cardMakerList = cardMakerList;
mDragStartListener = dragStartListener;
this.onItemTouchListener = onItemTouchListener;
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
if (fromPosition < toPosition){
for (int i = fromPosition; i < toPosition; i++){
Collections.swap(cardMakerList,i,i+1);
}
}else{
for (int i = fromPosition; i > toPosition; i--){
Collections.swap(cardMakerList,i,i-1);
}
}
notifyItemMoved(fromPosition,toPosition);
return true;
}
@Override
public void onItemDismiss(int position) {
cardMakerList.remove(position);
notifyItemRemoved(position);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_holder, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position)
{
String cardString = cardMakerList.get(position);
holder.cardText.setText(cardString);
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) ==
MotionEvent.ACTION_DOWN) {
mDragStartListener.onStartDrag(holder);
}
return false;
}
});
holder.close.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//cardMakerList.remove(position);
return false;
}
});
}
@Override
public int getItemCount(){
return cardMakerList.size();
}
}
有很多原因,这可能发生,其中一个是list
变量没有在某个时候失去它的主实例以及因为更新适配器不再监听它。在这种情况下,你应该在你的适配器要刷新RecyclerView只是调用此方法与新清单每次执行现在像
public void refreshMyList(List<String> list){
this.cardMakerList.clear();
this.cardMakerList.addAll(list);
this.notifyDataSetChanged();
}
的方法。
我不知道这可能是一个原因,但我会怎么称呼这 – martinseal1987
onPostExecute而不是调用cardAdapter.notifyDataSetChanged();调用cardAdapter.refreshMyList(newList); – Ricardo
对不起,我确实尝试过,出于某种原因,它不会工作,但它现在和你的答案已经解决了我的问题一切都工作正如它应该非常感谢你 – martinseal1987
我想帮助你。请告诉我cardAdapter类的源代码 – redAllocator
提及它正在工作,所以我不认为有在我的适配器的问题,但生病发布到我的问题@red_allocator – martinseal1987