2017-02-20 24 views
0

Этот вопрос связан с this one, о котором я спрашивал раньше.Android: вызов адаптера непосредственно в viewpager или фрагмент вызова на страницу?

создать ViewPager в MainActivity.java так:

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), когда я прокручиваю страницы (при нормальном нажатии)

Итак, я попытался написать класс адаптера непосредственно для каждой страницы следующим образом:

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 от сети).

Если вы выполняете эту сетевую задачу в потоке пользовательского интерфейса, она блокирует и может вызывать отстающую производительность. Это может быть причиной медленной загрузки ваших страниц. Вы должны выполнять сетевые задачи в отдельном потоке.

  • Так что я пытался написать класс адаптера непосредственно для каждой страницы, как этот

Вам нужно только один адаптер за просмотр ресайклера. Если вы хотите поддерживать несколько видов в одном и том же адаптере, переопределите getItemViewType(). Пример: https://stackoverflow.com/a/26245463/7395923

  • Важно ли создавать фрагменты на каждую страницу?
  • Почему я должен использовать фрагмент? (потому что какой-то программист рекомендовал его в виде пейджера)

Можно использовать пейджер с видом без фрагментов. Основываясь на вашем предыдущем вопросе (связанном вверху), кажется, что излишне загружать весь фрагмент, чтобы раздуть представление.Вот ссылка на пример пейджера с видом без фрагментов: https://stackoverflow.com/a/18710626/7395923

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^