【问题标题】:Load data from web service and show in Recycler View inside a FragmentPagerAdapter从 Web 服务加载数据并在 FragmentPagerAdapter 内的 Recycler 视图中显示
【发布时间】:2015-10-07 12:50:03
【问题描述】:

我在 FragmentPagerAdapter 中有 3 个片段,我想调用 Web 服务并在 Recycler View 中异步加载数据。 一切正常,数据接收成功,但回收器视图根本不显示任何内容,直到我滑动 Fragment 至少 2 个位置,然后返回该片段回收器视图显示数据。 什么问题?我该如何解决?

这些是我的代码:

ActivityMain.java

@Override   
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    ViewPager pager = (ViewPager) findViewById(R.id.fragmentPagerMain);

    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    FragmentNavigationDrawer fragNavDrawer = (FragmentNavigationDrawer) getSupportFragmentManager().findFragmentById(R.id.  fragment_navigation_drawer);
    fragNavDrawer.setUp((DrawerLayout) findViewById(R.id.drawerLayout), toolbar);

    MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager()  );
    pager.setAdapter(adapter);
    pager.setCurrentItem(3);
    SlidingTabLayout tabs = (SlidingTabLayout) findViewById(R.id.pagerTabLayout); 
    tabs.setViewPager(pager);
}

FragmentPagerAdapter.java

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return FragmentList.getInstance(position);
        case 1:
            return FragmentList.getInstance(position);
        case 2:
            return FragmentList.getInstance(position);
        default:
            return FragmentList.getInstance(position);
    }
}

FragmentList.java

public class FragmentList extends Fragment {

private ViewGroup view;
private ArrayList<ModelPurchase> data = new ArrayList<>();
private MyRecyclerPurchaseList adapter;
private RecyclerView recyclerView;

public static Fragment getInstance(int catId) {
    FragmentList fragment = new FragmentList();
    Bundle bundle = new Bundle();
    bundle.putInt("catId", catId);
    fragment.setArguments(bundle);

    return fragment;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = (ViewGroup) inflater.inflate(R.layout.fragment_list, container, false);


    new HttpRequests().new PurchasedList(new HttpRequests.RequestCompeleteListener() {
        @Override
        public void onCompeletd(ArrayList<ModelPurchase> arrayList) {
            data = arrayList;
            adapter.notifyDataSetChanged();
        }
    }).getList();
    recyclerView = (RecyclerView) view.findViewById(R.id.listAll);
    adapter = new MyRecyclerPurchaseList(getActivity(), data);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


    return view;
}}

【问题讨论】:

  • 有人请帮帮我!

标签: web-services android-fragments fragment fragmentpageradapter


【解决方案1】:

我遇到了大致相同的问题。将adapter 设置为RecyclerView 需要在OnCreateView 中完成。所以当我们的数据加载完成时,我们需要以某种方式调用OnCreateView

这可以通过分离然后重新附加fragment 来完成,因此您的代码将如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = (ViewGroup) inflater.inflate(R.layout.fragment_list, container, false);

    // use a boolean to prevent loading data twice...
    if ( !dataIsLoaded )
    {
    new HttpRequests().new PurchasedList(new HttpRequests.RequestCompeleteListener() {
    @Override
    public void onCompeleted(ArrayList<ModelPurchase> arrayList) {
        data = arrayList;
        dataIsLoaded = true;
        adapter.notifyDataSetChanged();

        // Detach then attach the fragment
        FragmentTransaction = ft getFragmentManager().beginTransaction();
        ft.detach(FragmentList.this);
        ft.attach(FragmentList.this);
        ft.commit();
    }
    }).getList();
    }

    else
    {
        recyclerView = (RecyclerView) view.findViewById(R.id.listAll);
        adapter = new MyRecyclerPurchaseList(getActivity(), data);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


        return view;
     }

}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多