2017-09-23 28 views
2

我正在使用交错的网格布局显示数据,以从数据库回收视图。我遇到了一个问题,从db删除项目以及从适配器删除位置后,我得到一些物品渲染问题。像散落在各处。 这里是我的代码StaggeredGridLayout管理器删除项目后,项目分散

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_note_favorite); 
    ButterKnife.bind(this); 
    toolbar = (Toolbar) findViewById(R.id.fav_note_toolbar); 
    setSupportActionBar(toolbar); 

    noteAdapter = new NoteAdapter(noteModelList, NoteFavoriteActivity.this); 
    layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.setAdapter(noteAdapter); 
    touchListenerRecycler(); 
    loadDataAll(); 


} 
private void loadAll() { 
    noteModelList.clear(); 

    DBManagerFav dbManagerFav = DBManagerFav.getInstance(NoteFavoriteActivity.this); 
    dbManagerFav.openDataBase(); 
    noteModelList = dbManagerFav.getAllNoteList(); 
    Log.i(TAG, " size : " + noteModelList.size()); 
    noteAdapter = new NoteAdapter(noteModelList, NoteFavoriteActivity.this); 
    recyclerView.setAdapter(noteAdapter); 
    noteAdapter.notifyDataSetChanged(); 

    dbManagerFav.closeDataBase(); 

} 


private void deleteOperation() { 

    DBManagerFav dbManagerFav = DBManagerFav.getInstance(NoteFavoriteActivity.this); 
    dbManagerFav.openDataBase(); 

    NoteModel noteModel = new NoteModel(); 
    noteModel.setId(noteModelList.get(adapterClickedPosition).getId()); 

    int status = dbManagerFav.deleteNote(noteModelList.get(adapterClickedPosition).getId()); 
    if (status > 0) { 

     noteAdapter.removeAt(adapterClickedPosition); 

    } 
    dbManagerFav.closeDataBase(); 
    loadDataAll(); 
} 
//this belongs to adapter 
public void removeAt(int position) { 
    Log.d(TAG, " removing at position : " + position); 
    noteModelList.remove(position); 
    notifyItemRemoved(position); 
    notifyItemRangeChanged(position, noteModelList.size()); 
    notifyDataSetChanged(); 
} 

我附上两个截图前后 后删除项目

enter image description here

删除项目

enter image description here

你能指出前后我出了什么我需要什么?

+0

删除'notifyDataSetChanged();'从** RemoveAt移除( int position)**方法 –

+0

@Nilesh,感谢回复,让我快速浏览 – Avinash

+0

@Nilesh,它不起作用 – Avinash

回答

0

你可以在里面放loadDataAll(){

layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); 
    recyclerView.setLayoutManager(layoutManager); 

// ........ } 瞧..

+0

谢谢它的工作原理,我试图与invalidateSpan但我错过了这个通知布局后重新加载 – Avinash