Проблема изменения пользовательского интерфейса определенной ячейки внутри gridview, который находится внутри пейджер представления - PullRequest
0 голосов
/ 15 октября 2018

Итак, у меня есть эта проблема с пользовательским интерфейсом, я создал календарь, который в основном состоит из Gridview внутри ViewPager, и я хочу показать, чтобы выделить / выделить, ячейку, которая показывает текущий день.Мне удалось это сделать, проблема возникает, когда пользователь проводит пальцем по ViewPager, подсвеченная ячейка остается выделенной, даже если дата неверна (посмотрите на картинки, чтобы понять).У меня есть 4 фрагмента, которые повторно используются для создания календаря, поэтому, когда я проведу 4 раза, а затем проведу назад, проблема исчезнет, ​​поэтому я думаю, что проблема в том, как я обновляю интерфейс на адаптере, но я незнаете, как решить эту проблему.

при запуске

при проведении пальцем влево (видно, что день 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, который сравнивалдата изделия до сегодняшней даты:

        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 Ответ

0 голосов
/ 16 октября 2018

Причина, по которой я обнаружил, была очень проста в том, что здесь происходит, потому что на основе DateTime.Today вы впервые отмечаете сегодняшнюю дату.

Но когда вы знаете, что переходите с одной страницы на другую, вы неснимите пометку с этой даты, так что произойдет в в этом случае, когда текущая дата будет помечена, но когда вы перейдете к следующему экрану , вы не снимите пометку с фона, поэтому он останетсято же самое.

Возврат в случае, если это не имеет смысла.

...