2016-12-10 9 views
0

Привет, я использую библиотеку Caldroid для настройки вида календаря в своем приложении для отслеживания привычек, и есть два хеш-карты successMap и failureMap, представляющие успешные и неудачные дни привычки. Я устанавливаю зеленый круглый фон, пригодный для успешных дней, и красный круговой фон, пригодный для неудачных дней, но показан только один из них, который написан позже в коде. Вот этот метод для создания календаря:Фоновый рисунок для Caldroid

private void setCalendar(){ 
    Map<Date, Drawable> successMap = new HashMap<>(); 
    Map<Date, Drawable> failureMap = new HashMap<>(); 
    //For success days 
    for(int i=0; i<successDays.size(); i++){ 
     successMap.put(successDays.get(i), getResources().getDrawable(R.drawable.green_circular)); 
    } 
    //For failure days 
    for(int i=0; i<failureDays.size(); i++){ 
     failureMap.put(failureDays.get(i), getResources().getDrawable(R.drawable.red_circular)); 
    } 
    caldroidFragment.setBackgroundDrawableForDates(successMap); 
    caldroidFragment.setBackgroundDrawableForDates(failureMap); 
    caldroidFragment.refreshView(); 
} 

В этом только что даты указаны, которые написаны позже, например, здесь только не дни будут shown.I проверили эти ArrayLists и карты значения и они прекрасны. Итак, как я могу решить эту проблему?

ответ

2

После проверки Caldroid библиотеки я обнаружил, что библиотека каждый раз, когда вы звоните setBackgroundDrawableForDates() ясно предыдущий список

public void setBackgroundDrawableForDates(
     Map<Date, Drawable> backgroundForDateMap) { 
    if (backgroundForDateMap == null || backgroundForDateMap.size() == 0) { 
     return; 
    } 

    backgroundForDateTimeMap.clear(); 

    for (Date date : backgroundForDateMap.keySet()) { 
     Drawable drawable = backgroundForDateMap.get(date); 
     DateTime dateTime = CalendarHelper.convertDateToDateTime(date); 
     backgroundForDateTimeMap.put(dateTime, drawable); 
    } 
} 

Так soluation к вашей проблеме, чтобы добавить два списка togthers и вызовите setBackgroundDrawableForDates () только один раз, чтобы избежать сброса Like That

private void setCalendar(){ 
     Map<Date, Drawable> successMap = new HashMap<>(); 
     Map<Date, Drawable> failureMap = new HashMap<>(); 
     //For success days 
     for(int i=0; i<successDays.size(); i++){ 
      successMap.put(successDays.get(i), getResources().getDrawable(R.drawable.green_circular)); 
     } 
     //For failure days 
     for(int i=0; i<failureDays.size(); i++){ 
      failureMap.put(failureDays.get(i), getResources().getDrawable(R.drawable.red_circular)); 
     } 
     successMap.putAll(failureMap); 
     caldroidFragment.setBackgroundDrawableForDates(successMap); 
     caldroidFragment.refreshView(); 
    } 
+0

Спасибо @Ahmed Махмуду, что решается вопрос :) –

+0

им пытаются выбрать только одну дату в то время, и установить выбранный цвет фона даты , но его применение цвета во все выбранные даты. Если выбрать 1, то измените его цвет фона, но если я выберу 2, цвет должен применяться только к 2 и удаляться с 1 – Erum