【发布时间】:2017-03-31 14:11:56
【问题描述】:
嗨,我认为我的问题与此 notifyDataSetChanged not working on RecyclerView 有关 我试图从异步任务中刷新我的布局但是当我调用 notify datasetchanged 时没有任何反应,但是如果我创建适配器的新实例并调用 notifydatasetchanged 那么它确实有效我尝试了一些无济于事的事情并想知道我做错了什么,
我是这样引用的
public ListAdapter cardAdapter;
然后在 onCreate 中,我初始化与我的回收站视图有关的所有内容,(这里唯一需要的是我如何初始化我的适配器,但为了清楚起见,我将添加与我的回收站视图有关的所有内容)
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();
从 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();
}
}
【问题讨论】:
-
我想帮助你。请给我看一下 cardAdapter 类的源代码
-
如前所述,它正在工作,所以我认为我的适配器没有问题,但我将其发布到我的问题中@red_allocator
标签: android android-recyclerview adapter