【发布时间】:2016-01-11 08:14:38
【问题描述】:
我遇到了这个问题
我使用的是交错的网格视图,它有两列和单列的组合......像这样的东西
一切正常,直到我上下滚动几次,它随机变成这样的东西
再画几卷,就这样结束了
我不知道为什么,而且非常随机。每次显示页面时,我都尝试执行 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");
}
}
如果需要,我也可以发布适配器。任何建议都非常感谢大家。
适配器代码在这里(不想让帖子乱七八糟)http://pastebin.com/QkZbjjp1
【问题讨论】:
-
请显示您的适配器代码。如果您正在执行任何可能是罪魁祸首的后台操作。
-
加到帖子Jason,请看
-
我不知道这是否是问题所在,但一个潜在的原因是在第 77 行,您应该使用
getItemViewType方法,因为这是定义视图类型的方法。 -
正如 Jason 的评论中提到的,我也认为问题出在您的
getItemViewType()方法中。您没有根据位置处理 ViewType,您只是更改第一个(位置 0)和最后一个(位置 11)的类型,但对于其余位置,您使用的是相同的类型 @ 987654332@. -
你错过了每个项目的行和列
标签: java android android-recyclerview staggered-gridview