Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:直接在viewpager中调用适配器还是每页调用片段?_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android:直接在viewpager中调用适配器还是每页调用片段?

Android:直接在viewpager中调用适配器还是每页调用片段?,android,android-fragments,android-viewpager,Android,Android Fragments,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; } @O

这个问题与我以前问过的问题有关

我在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) {

        }
            ...
    } 
});
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;
}
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;
 }
现在我想用一些json RecyclerView数据列表填充每个页面(从网络获取json)

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

我第一次为每个页面创建一个片段,如下所示:

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) {

        }
            ...
    } 
});
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;
}
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;
 }
(对于5页,我有5个片段

但当我刷页面时,我的应用程序运行缓慢(laggy)。(使用tap按钮是正常的)

因此,我尝试直接为每个页面编写一个适配器类,如下所示:

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) {

        }
            ...
    } 
});
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;
}
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;
 }
有了顶级代码,我的应用程序可以通过交换页面再次快速运行

每个页面创建片段是否重要

为什么我必须使用fragment?(因为一些程序员在viewpager中推荐了它)

我的方法(没有片段的第二个方法)对于实际应用程序是真还是假

(我是noob,这是我的第一个应用)

  • 现在我想用一些json RecyclerView数据列表填充每个页面(从网络获取json)
如果在UI线程上执行此网络任务,它将阻塞并可能导致性能下降。这可能是页面加载缓慢的原因。您应该在单独的线程上执行网络任务

  • 因此,我尝试直接为每个页面编写一个适配器类,如下所示
每个回收器视图只需要一个适配器。如果要在同一个适配器中支持多个视图,请重写getItemViewType()。示例如下:

  • 每个页面创建片段是否重要
  • 为什么我必须使用fragment?(因为一些程序员在ViewPager中推荐了它)
可以使用不带片段的视图寻呼机。基于您前面的问题(链接在顶部),仅为了膨胀视图而加载整个片段似乎有些过分。以下是指向不带片段的视图寻呼机示例的链接:

我希望这有帮助