0

こんにちは、習慣トラッカー アプリでカレンダー ビューをカスタマイズするために Caldroid ライブラリを使用しています。2 つのハッシュ マップがあり、習慣の成功日と失敗日を表してsuccessMapいます。failureMap成功した日には緑の円形の背景を、失敗した日には赤い円形の背景を描画可能に設定していますが、コードで後で記述されるそのうちの 1 つだけが表示されます。カレンダーを設定する方法は次のとおりです。

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();
}

これには、後で書き込まれる日付のみが表示されます。たとえば、ここでは失敗した日のみが表示されます。これらの配列リストとマップの値を確認しましたが、問題ありません。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

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);
    }
}

したがって、問題の解決策は、2つのリストを一緒に追加し、 setBackgroundDrawableForDates() を1回だけ呼び出して、リセットを回避することです

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();
    }
于 2016-12-10T12:58:44.063 に答える