我的任务是创建一个日期滑块,该滑块最初显示当前周的日期,从星期日开始到星期六。当用户以任一方式滑动时,它需要“捕捉”到下一周/前一周。
我的问题是,当用户从左向右滚动时,我无法更新适配器,这应显示前一周。更新后备数据以显示新片段,但视图似乎不更新。从右到左滚动显示未来几周的工作非常好。
所以基本上,我的问题是要刷新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();
}
方法/属性:FragmentPagerAdapter
和GetItems
Count
同样,支持列表确实会更新。在第一次从左向右滑动(转到过去)之后,控制台显示列表中现在有4个片段。但是,ViewPager不允许我从左向右滑动以查看新的第一个片段。
我在Google上进行了大量搜索,但我找不到任何有用的内容。我希望我能在这里得到一些帮助。我有这个约95%完成,我只是无法计算这最后一部分。提前谢谢。
答案 0 :(得分:0)
使用FragmentStatePagerAdapter
更新您的片段数据:
public class YourFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//Update Here
} else {
}
}
}