Vee*_*eru 5 java android staggered-gridview android-recyclerview
我遇到了这个问题
我使用交错网格视图,它具有两列和单列的组合..像这样
一切正常,直到我上下滚动几次,它随机变成这样
又卷了几卷,最后就变成这样了
我不知道为什么,而且它非常随机。我尝试在每次显示页面时执行notifyDataSetChanged,但似乎没有执行任何操作
这是我的仪表板的代码
public class DashboardStaggered extends Fragment {
RecyclerView mRecyclerView;
View v;
MasonryAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("MASONRY", "onCreateView");
super.onCreate(savedInstanceState);
if(v==null) {
Log.d("MASONRY", "v is NULL recreating");
v = inflater.inflate(R.layout.activity_dashboard_staggered, container, false);
setupRecyclerView();
}else{
Log.d("MASONRY", "v is NOT NULL");
}
return v;
}
private void setupRecyclerView(){
mRecyclerView = (RecyclerView) v.findViewById(R.id.masonry_grid);
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
adapter = new MasonryAdapter(getActivity(),this);
mRecyclerView.setAdapter(adapter);
SpacesItemDecoration decoration = new SpacesItemDecoration(12);
mRecyclerView.addItemDecoration(decoration);
adapter.notifyDataSetChanged();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
public void onResume() {
super.onResume();
Log.d("MASONRY", "onResume");
if(mRecyclerView==null) {
setupRecyclerView();
}
}
@Override
public void onPause() {
super.onPause();
Log.d("MASONRY", "onPause");
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要的话我也可以发布适配器。任何建议都将受到高度赞赏。
适配器代码在这里(不想让帖子变得混乱)http://pastebin.com/QkZbjjp1
正如杰森在评论中提到的,这是 itemgetviewtype 中的一个错误,逻辑错误比其他任何错误都重要。但吸取了教训, getItemViewType 的更新代码是
@Override
public int getItemViewType(int position) {
// Return type based on position
return tileDefinitions.get(position).getTileType();
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家指出。
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |