PageAdapter的参数未在NotificationDataSetChanged上更新

时间:2019-04-18 11:25:37

标签: android adapter

我创建了一个需要将数据发送到ViewPager上的RecyclerView的应用程序,此数据是来自api的一些json查询。

我的改装产品的“ onResult”表示数据已正确查询,因此这里没有问题。

但是,当我更新ViewPager适配器时,来自变量的数据未更新,我该怎么做。有什么想法吗?

  1. 在变量intiate之后,我试图将viewpager.setAdapter([...])放在onResult上。

  2. 我在setAdapter之前初始化变量self,在这里它起作用了。 (因此,变量数据的传输是可以的)

  3. 当我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);
    }
}

0 个答案:

没有答案