如何在包含多个片段的选项卡式活动中进行多个HTTP调用?

时间:2017-09-01 00:02:40

标签: android android-recyclerview retrofit

因为我上次用撇子踢了我的牙齿,所以这次我会确保我的问题更好。

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调用?

1 个答案:

答案 0 :(得分:1)

由于您使用PagerAdapter,显然您看到Toast,因为适配器正在从当前位置创建+/- 1个片段。在您的情况下,当您第一次创建适配器时,会创建ThisIsMyFirstFragment,然后ThisIsMySecondFragment。这就是PagerAdapter的工作方式,可以提高用户体验。如果您有3个片段并且您第一次创建适配器,则首先创建第二个片段。当你移动到第二个片段时,第一个片段仍在那里,先前创建了第二个片段,然后创建了第三个片段。在这种情况下,您创建了3个片段,但只显示当前位置。

在您的情况下,如果您获得E/RecyclerView: No adapter attached; skipping layout,可能是因为您没有从网络获取任何数据。使用debuger查看您是否获得数据。