2017-02-20 49 views
0

这个问题与我之前问过的this one有关。Android:直接在viewpager中调用适配器或每页调用片段?

我创建一个MainActivity.java viewpager这样的:

final ViewPager viewPager = (ViewPager) findViewById(R.id.vp_horizontal_ntb); 
viewPager.setAdapter(new PagerAdapter() { 
    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public boolean isViewFromObject(final View view, final Object object) { 
     return view.equals(object); 
    } 

    @Override 
    public void destroyItem(final ViewGroup container, final int position, final Object object) { 
     ((ViewPager) container).removeView((View) object); 
    } 

    @Override 
    public Object instantiateItem(final ViewGroup container, final int position) { 
     if(position==0) { 
      // here is important! 
     } else if(position == 1) { 

     } 
      ... 
    } 
}); 

现在我想填补一些JSON RecyclerView数据列表中的每个页面(从网络获得JSON)。

每个页面都有独立的数据列表。

对于第一次,我像这样创建的每个页面片段:

if (position == 0) { 
    final View view = LayoutInflater.from(getActivity().getBaseContext()).inflate(R.layout.fragment_tab0, null, false); 
    tabFragment.MyAdapter adapter = new tabFragment.MyAdapter(getActivity().getSupportFragmentManager()); 
    adapter.addFragment(new tab0Fragment(), getResources().getString(R.string.tab0)); 
    container.addView(view); 
    return view; 
} 

(所以对于第5页,我有5个片段

DEMO

但我的应用程序运行缓慢。 (laggy)当我滑动页面时(用tap buttom是正常的)

所以我试着直接为每个页面写一个Adapter类,像这样:

if (position == 0) { 
    final View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.item_vp_list, null, false)); 
    final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.rv); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getBaseContext(), LinearLayoutManager.VERTICAL, false)); 
    recyclerView.setAdapter(new Tab0RecycleAdapter()); 
    container.addView(view); 
    return view; 
} 

使用顶级的代码,我的应用程序再次运行快速交换页面!

为每个页面创建片段很重要吗?

我为什么一定要用片段?(因为有些程序员viewpager建议吧)

我的方法(不片段第二种方法)是真的还是假的实际应用?

(我是小白,这是我的第一个应用程序)

回答

1
  • 现在我想填补一些JSON RecyclerView数据列表中的每个页面。(从网络获得JSON)。

如果您在UI线程上执行此网络任务,它将阻塞并可能导致laggy性能。这可能是您的网页加载缓慢的原因。您应该在单独的线程上执行网络任务。

  • 于是,我就直接写一个适配器类的每一页这样

你只需要每回收一个观点适配器。如果您想在同一个适配器中支持多个视图,请覆盖getItemViewType()。示例在这里:https://stackoverflow.com/a/26245463/7395923

  • 是否每个页面创建片段很重要?
  • 为什么我必须使用片段? (因为一些程序员推荐它在查看寻呼机中)

可以使用没有片段的视图寻呼机。根据你以前的问题(在顶部链接),似乎矫枉过正加载整个片段来夸大视图。这里是一个链接到查看寻呼机没有片段的例子:https://stackoverflow.com/a/18710626/7395923

我希望这可以帮助。