我创建了一个需要将数据发送到ViewPager上的RecyclerView的应用程序,此数据是来自api的一些json查询。
我的改装产品的“ onResult”表示数据已正确查询,因此这里没有问题。
但是,当我更新ViewPager适配器时,来自变量的数据未更新,我该怎么做。有什么想法吗?
在变量intiate之后,我试图将viewpager.setAdapter([...])放在onResult上。
我在setAdapter之前初始化变量self,在这里它起作用了。 (因此,变量数据的传输是可以的)
当我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);
}
}