Inflate ListView в пользовательском PagerAdapter делает вызов setAdapter неэффективным - PullRequest
0 голосов
/ 02 мая 2018

Я попытался создать пользовательский PagerAdapter, так как я хочу показать некоторые страницы, где каждая страница содержит ListView, который должен быть инициализирован конструктором адаптера пейджера MyPagerAdapter, который получает Activity, где используется ViewPager и список строк entries.

Проблема в том, что setAdapter(myListAdapter), вызванный на ListView, кажется неэффективным, а просмотр списка пустым.

Здесь фрагмент кода, где я пытаюсь инициализировать ListView:

 public class MyPagerAdapter extends PagerAdapter {
 ...
 public MyPagerAdapter( Activity activity, ArrayList<String> entries){
        mContext = activity.getBaseContext();
        inflater = LayoutInflater.from(mContext);
        ViewGroup viewGroup = (ViewGroup) activity.findViewById(R.id.pager);
        View v=inflater.inflate(R.layout.page1, viewGroup);
        ListView page_1_list = (ListView) v.findViewById(R.id.page_1_list);
        mylistAdapter = new ArrayAdapter(mContext, R.layout.spinner_item, entries);
        page_1_list.setAdapter(mylistAdapter);
 }
  ....
}

Может кто-нибудь объяснить мне почему так происходит и как я могу исправить ошибку?

  • Список записей не пустой.
  • У ViewPager есть несколько страниц, но здесь я показываю только список относительно первой страницы.
  • Эта проблема не имеет ничего общего с xml, так как, если я попытаюсь заполнить ее непосредственно из действия работ.
  • Я умею гуглить уроки по ViewPager. Вопрос связан с проблемой, и ответ должен быть связан с самой проблемой. Поэтому, если ваш ответ не объясняет, ПОЧЕМУ listView не может быть заполнен элементами с описанным подходом, это не по теме, и я его не приму.

1 Ответ

0 голосов
/ 02 мая 2018

Вы должны использовать FragmentStatePagerAdapter вместо непосредственного использования контроллеров в классе Pageradapter. то есть:

public class CustomPagerAdapter extends FragmentStatePagerAdapter {

private ArrayList<String> entries;
private MyFragment myFragment;

public CustomPagerAdapter(FragmentManager fragmentManager, ArrayList<String> entries) {
    super(fragmentManager);
    this.entries = entries;
}

// Returns total number of pages
@Override
public int getCount() {
    return entries.size();
}

// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
    myFragment = new MyFragment();
    final Bundle bundle = new Bundle();
   //pass your array list in bundle
    myFragment.setArguments(bundle);
    return myFragment;
}

// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {

    return title_of_viewpager;
}
}
...