我有这个问题的用户界面,我做了一个日历,基本上是由一个网格视图内的ViewPager,我想显示高亮/突出,显示当前日期的单元格。我设法做到了,问题来了,当用户滑动ViewPager,高亮显示的单元格仍然高亮显示,即使日期是不正确的(看图片理解)。
我有4个片段被重复使用来制作日历,所以当我滑动4次,然后滑动回来的问题消失了,所以我认为问题是在我刷新适配器上的用户界面的方式,但我不知道如何解决这个问题。
On startup
On swipe left(您可以看到第12天被突出显示)
下面是我的适配器的代码:
public void UpdateToday() { today = DateTime.Today; }
public override DateTime this[int position]
{
get { return datetimeList[position]; }
}
public override int Count
{
get { return datetimeList.Count; }
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View module = convertView;
if (module == null)
{
module = LayoutInflater.From(context).Inflate(Resource.Layout.calendar_gridcell, null, false);
}
var textView = module.FindViewById<TextView>(Resource.Id.calendar_cell);
if (datetimeList[position].Month == month)
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorSecondary)));
else
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorTextDarkSemiTransparent)));
if (datetimeList[position].Month == today.Month && datetimeList[position].Day == today.Day)
{
textView.Background = context.GetDrawable(Resource.Drawable.cell_today);
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorAccent)));
}
textView.Text = datetimeList[position].Day.ToString();
module.SetPadding(8, 8, 8, 8);
return module;
}
编辑
因此,解决方案非常简单,我只需要在If中添加一个else语句,用于比较项目日期和今天的日期:
if (dateTimeList[position].Date == DateTime.Today)
{
textView.Background = context.GetDrawable(Resource.Drawable.cell_today);
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorAccent)));
}
else
{
if (dateTimeList[position].Month == month)
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorSecondary)));
else
textView.SetTextColor(new Android.Graphics.Color(context.GetColor(Resource.Color.colorTextDarkSemiTransparent)));
textView.Background = context.GetDrawable(Resource.Drawable.cell_background);
}
1条答案
按热度按时间vsnjm48y1#
我发现的原因很简单,这里发生的事情是基于日期时间,今天你首先标记今天的日期。
但是当你知道你从一个页面滑到另一个页面时,你不会取消标记那个日期,所以在this的情况下,会发生什么,当前日期被标记,但是当你移动到next screen时,你不会取消标记背景,所以它仍然保持不变。
如果这没有意义,请还原。