FragmentPagerAdapter - 在开头插入片段不会刷新

时间:2016-01-26 12:00:40

标签: android android-fragments xamarin android-viewpager

我的任务是创建一个日期滑块,该滑块最初显示当前周的日期,从星期日开始到星期六。当用户以任一方式滑动时,它需要“捕捉”到下一周/前一周。

target design

我的问题是,当用户从左向右滚动时,我无法更新适配器,这应显示前一周。更新后备数据以显示新片段,但视图似乎不更新。从右到左滚动显示未来几周的工作非常好。

所以基本上,我的问题是要刷新FragmentPagerAdapter,以便能够查看可能附加到后备数据列表开头的动态添加的片段。

当我使用Xamarin时,我真的不在乎解决方案是否在Xamarin中。如果有人在Java中工作,我可以只转换代码。所以请不要将答案仅限于Xamarin Android。

对于设计,我使用的是ViewPager,因为它会自动处理“捕捉”。我最初尝试使用RecyclerView,但无法使捕捉工作可靠。所以我决定使用ViewPager和FragmentPagerAdapter.

对于ViewPager的子片段,我使用WeekFragment每天创建7个子片段(DayFragment)。调整子片段的大小以确保本周显示7个。

最初,我创建WeekFragment s 3周:当前周,前一周和未来一周。它们存储在FragmentPagerAdapter

的通用列表中

我也正在处理OnPageSelected的{​​{1}}侦听器事件。当用户滑动以转到新页面时,我会检查该页面是最后一页还是第一页。由于滚动到最后一页工作正常,这是用于滑动到第一页的代码...

ViewPager

public void OnPageSelected(int position) { var isAtBeginning = position == 0; if (isAtBeginning) { // we are at the beginning of the date list. Append another week to beginning _pagerAdapter.AddWeekToBeginning(); } } 方法是..

AddWeekToBeginning

我还覆盖了两个主要 public void AddWeekToBeginning() { _earliestDate = _earliestDate.AddDays(-DaysInWeek); var frag = new WeekFragment(_earliestDate); frag.SelectedDate = this.SelectedDate; frag.DateSelected += DaySelected; _fragments.Insert(0, frag); NotifyDataSetChanged(); } 方法/属性:FragmentPagerAdapterGetItems

Count

同样,支持列表确实会更新。在第一次从左向右滑动(转到过去)之后,控制台显示列表中现在有4个片段。但是,ViewPager不允许我从左向右滑动以查看新的第一个片段。

我在Google上进行了大量搜索,但我找不到任何有用的内容。我希望我能在这里得到一些帮助。我有这个约95%完成,我只是无法计算这最后一部分。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用FragmentStatePagerAdapter

更新您的片段数据:

 public class YourFragment extends Fragment {
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //Update Here

        } else {
        }
    }
}