2017-02-20 41 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

我希望這可以幫助。

相關問題