【发布时间】:2015-11-09 07:42:03
【问题描述】:
我在我的 ViewPager 适配器 中使用了 3 个片段。我将从 Parse(parse.com) 加载数据并在回收站视图中显示它们。以下代码导致我的应用程序崩溃。我的理解是,当我的 MainActivity 加载时,这是我的第一个片段,即它立即被用户查看,因此 setUserVisibleHint 函数被立即调用并在该 v.findViewById代码导致空指针异常,因为可能未调用 setContentView hasnt/。我的证明是,如果我向 setUserVisisbleHint 添加 1 秒延迟,那么我的代码可以正常工作。
现在我想使用 Parse 添加服务器 PULL 请求,将列表中的数据添加到适配器并在用户查看页面后填充 recyclerview
1) 我是否应该在 setUserVisisbleHint 中添加所有代码并添加 0.5secc 延迟,以便在调用 setContentView 后执行它,确保我没有收到空指针异常错误或
2) 有没有更好的方法/我可以使用其他功能来实现相同的功能?
public class NewsFeed extends Fragment {
LinearLayoutManager mLayoutManager;
boolean _areLecturesLoaded=false;
View v;
ProgressBar bar;
public NewsFeed() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// Inflate the layout for this fragment
v=inflater.inflate(R.layout.fragment_news_feed, container, false);
RecyclerView mRecyclerView = (RecyclerView)v.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(v.getContext());
mRecyclerView.setLayoutManager(mLayoutManager);
MyStickyAdapter mAdapter = new MyStickyAdapter(v.getContext());
mRecyclerView.setAdapter(mAdapter);
// mRecyclerView.addItemDecoration(new StickyRecyclerHeadersDecoration(mAdapter));
return v;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && !_areLecturesLoaded ) {
_areLecturesLoaded = true;
v.findViewById(R.id.asd).setVisibility(View.GONE);
}
}
}//Closes Fragment
我将这个库用于我的回收站视图StickyHeaderRecyclerView
【问题讨论】:
-
阅读这个有用的答案stackoverflow.com/a/39911028/3496570
标签: android android-fragments tabs android-viewpager android-recyclerview