Я создаю приложение, в котором мне нужно отправить данные в RecyclerView на ViewPager, эти данные представляют собой некоторые json-запросы из API.
"onResult" моей модификации говорит, что данные - это правильный запрос, поэтому здесь нет проблем.
Но когда я обновляю адаптер ViewPager, данные из переменной не обновляются, что бы я ни делал. Есть идеи?
Я попытался поместить viewpager.setAdapter ([...]) в onResult, после того, как переменная начала.
Я запускаю переменную непосредственно перед setAdapter, здесь это сработало.
(так что перемещение переменных данных в порядке)
Когда я Log.d () переменная, инициированная с данными модернизации, она отображается.
MainFragment
List<News> news = new ArrayList<>();
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable iewGroup container, @Nullable Bundle savedInstanceState) {
...
pager.setAdapter(new PageAdapter(Objects.requireNonNull(getActivity()).getSupportFragmentManager(),
pageTitles,
news));
...
}
@Override
public void onResult(List<News> news) {
this.news = news; // At this step news contain 12 elements of type news.
pager.getAdapter().notifyDataSetChanged();
}
PageAdapter
...
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
...
Прямо сейчас, когда я вхожу в адаптер после обновления, переменная все еще пуста.
Я просто хочу, чтобы мои данные передавались через адаптер после обновления onResult ^^.
Чуть ниже всего класса MainFragment и адаптера
-----------------------------------
Основной фрагмент
public class MainFragment extends Fragment implements NewsAsyncTask.Listeners{
ViewPager pager;
List<News> news = new ArrayList<>();
ArrayList<String> pageTitles = new ArrayList<>();
public MainFragment(){}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View result = inflater.inflate(R.layout.fragment_main, container, false);
pager = (ViewPager) result.findViewById(R.id.main_viewpager);
new NewsAsyncTask(this).execute("JakeWharton");
pageTitles.add(getString(R.string.page_title_topstories));
pageTitles.add(getString(R.string.page_title_mostpopular));
pageTitles.add(getString(R.string.page_title_favorites));
News test = new News();
test.setTitle("TEST");
news.add(test);
Log.d("[********]",news.get(0).getTitle());
pager.setAdapter(new PageAdapter(Objects.requireNonNull(getActivity()).getSupportFragmentManager(),
pageTitles,
news));
TabLayout tabs = (TabLayout) result.findViewById(R.id.main_tablayout);
tabs.setupWithViewPager(pager);
tabs.setTabMode(TabLayout.MODE_FIXED);
return result;
}
@Override
public void onResult(List<News> news) {
this.news = news;
pager.getAdapter().notifyDataSetChanged();
}
PageAdapter
public class PageAdapter extends FragmentPagerAdapter {
private final ArrayList<String> pageTitle;
private List<News> news;
public PageAdapter(FragmentManager fm, ArrayList<String> pageTitle, List<News> news) {
super(fm);
this.pageTitle = pageTitle;
this.news = news;
}
@Override
public Fragment getItem(int i) {
return PageFragment.newInstance(news);
}
@Override
public int getCount() {
return pageTitle.size();
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return pageTitle.get(position);
}
}