Android Fragments 更改视图页导航中网格视图内特定单元格的UI时出现问题

xsuvu9jc  于 2022-12-19  发布在  Android
关注(0)|答案(1)|浏览(116)

我有这个问题的用户界面,我做了一个日历,基本上是由一个网格视图内的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);
        }
vsnjm48y

vsnjm48y1#

我发现的原因很简单,这里发生的事情是基于日期时间,今天你首先标记今天的日期。
但是当你知道你从一个页面滑到另一个页面时,你不会取消标记那个日期,所以在this的情况下,会发生什么,当前日期被标记,但是当你移动到next screen时,你不会取消标记背景,所以它仍然保持不变。
如果这没有意义,请还原。

相关问题