因为我上次用撇子踢了我的牙齿,所以这次我会确保我的问题更好。
HomeActivity.java
private class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position){
case 0:
return new ThisIsMyFirstFragment();
case 1:
return new ThisIsMySecondFragment();
}
return null;
}
现在,当Homeactivity被创建时,位置显然是1和我的" FirstFragment"执行Retrofit调用并相应地在recyclerView中显示数据。到目前为止一切都很好。
然而,当我滑动到我的" SecondFragment"时,虽然对list_item.xml进行了一些修改,但基本相同,我得到了
E/RecyclerView: No adapter attached; skipping layout
我尝试在我的SecondFragment中添加Toast仅用于调试目的,并且意识到每次在HomeActivity中调用onCreate时都会显示Toast消息。我在这里错过了什么吗?
SecondFragment.java
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news,container,false);
mPresenter = new NewsPresenter(this);
mRecyclerView = (RecyclerView) view.findViewById(R.id.news_recyclerview);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(view.getContext());
mRecyclerView.setLayoutManager(layoutManager);
getNewsFeed();
return view;
}
@Override
public void getNewsFeed() {
mPresenter.getNews().enqueue(new Callback<DocumentResponse>() {
@Override
public void onResponse(Call<DocumentResponse> call, Response<DocumentResponse>
MyResponseModel model = response.body();
myList = model .getSomeStuff();
mAdapter = new myAdapter(myList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<DocumentResponse> call, Throwable t) {
}
});
}
TL;博士 如何在标签式活动中同时处理多个http调用?
答案 0 :(得分:1)
由于您使用PagerAdapter
,显然您看到Toast
,因为适配器正在从当前位置创建+/- 1个片段。在您的情况下,当您第一次创建适配器时,会创建ThisIsMyFirstFragment
,然后ThisIsMySecondFragment
。这就是PagerAdapter
的工作方式,可以提高用户体验。如果您有3个片段并且您第一次创建适配器,则首先创建第二个片段。当你移动到第二个片段时,第一个片段仍在那里,先前创建了第二个片段,然后创建了第三个片段。在这种情况下,您创建了3个片段,但只显示当前位置。
在您的情况下,如果您获得E/RecyclerView: No adapter attached; skipping layout
,可能是因为您没有从网络获取任何数据。使用debuger查看您是否获得数据。