android - बच्चों के विचारों की संख्या() को लाइनरलेआउट कंटेनर को रद्द करने के बाद कहा नहीं गया



view calendar (1)

यदि लेआउट स्तर तय करने से, लेआउट स्तर पर invalidate() को कॉल किया जाता है, तो इसका पुन: निकाला जाना चाहिए। इसलिए बच्चे के विचारों पर ही invalidate() कॉल करता है, जो प्रभावित / गंदे हैं एक सेल में हुए परिवर्तनों में से कोई भी लेआउट पर दिखाई नहीं देता है, इसलिए लेआउट किसी भी बच्चे को अमान्य करने की आवश्यकता नहीं देखता है।

आपको इस दृश्य को स्वयं अमान्य कर दिया जाना चाहिए, जब उसे दोबारा तैयार करना होगा। आपके मामले में मैं setParamView विधि में setParamView को setParamView करने के लिए setParamView । जहाँ तक मैं कोड को समझता हूं, यह वह तरीका है जो कैलेंडर में एक दिन के रूप में एक कक्ष को सजाने के लिए जिम्मेदार है।

मैं एक कैलेंडर दृश्य लिख रहा हूँ.जब मैंने अगले महीने बटन दबाया, तो मैं mCalendarContainerLL.invalidate () कॉल करता हूं; लेकिन मेरे कस्टम विचारों को रेखांकित नहीं किया गया था। मेरे कस्टम दृश्य में ड्रेड विधि को नहीं बुलाया गया था।

Ps: अगर मैं सीधे सभी कैलेंडर सेल दृश्य को अमान्य करता हूँ। यह काम करता है। ऐसा क्यों हुआ ???

यहां कोड है:

private CalendarWidgetDayCell updateCalendarView() {

        CalendarWidgetDayCell dayCellSelected = null;
        boolean isSelected = false;

        final boolean isHasSelection = (mCalendarSelected.getTimeInMillis() != 0);

        final int selectedYear = mCalendarSelected.get(Calendar.YEAR);
        final int selectedMonth = mCalendarSelected.get(Calendar.MONTH);
        final int selectedDay = mCalendarSelected.get(Calendar.DAY_OF_MONTH);

        Calendar dateXOfCalendar = Calendar.getInstance();
        dateXOfCalendar.setTimeInMillis(mStartDateCurrentMonth.getTimeInMillis());

        Log.d(tag, "updateCalendarView cpt_func_ " + "mDayCellList.size(): " + mDayCellList.size());
        for (int i = 0; i < mDayCellList.size(); i++) {
            final int yearOfCellItem = dateXOfCalendar.get(Calendar.YEAR);
            final int monthOfCellItem = dateXOfCalendar.get(Calendar.MONTH);
            final int dayOfCellItem = dateXOfCalendar.get(Calendar.DAY_OF_MONTH);
            final int dayOfWeekOfCellItem = dateXOfCalendar.get(Calendar.DAY_OF_WEEK);
            CalendarWidgetDayCell dayCellItem = mDayCellList.get(i);

            boolean isToday = false;
            if (mCalendarToday.get(Calendar.YEAR) == yearOfCellItem) {
                if (mCalendarToday.get(Calendar.MONTH) == monthOfCellItem) {
                    if (mCalendarToday.get(Calendar.DAY_OF_MONTH) == dayOfCellItem) {
                        isToday = true;
                    }
                }
            }

            // check holiday
            boolean isHoliday = false;
            if ((dayOfWeekOfCellItem == Calendar.SATURDAY) || (dayOfWeekOfCellItem == Calendar.SUNDAY))
                isHoliday = true;
            if ((monthOfCellItem == Calendar.JANUARY) && (dayOfCellItem == 1))
                isHoliday = true;

            isSelected = false;
            if (isHasSelection) {
                if ((selectedDay == dayOfCellItem) && (selectedMonth == monthOfCellItem)
                        && (selectedYear == yearOfCellItem)) {
                    isSelected = true;
                }
            }
            dayCellItem.setSelected(isSelected);

            boolean hasRecord = false;

            if (isSelected)
                dayCellSelected = dayCellItem;

            dayCellItem.setViewParam(yearOfCellItem, monthOfCellItem, dayOfCellItem, isToday, isHoliday,
                    mCurrentMonthInCalendar, hasRecord);

            dayCellItem.invalidate();//It works well.
            dateXOfCalendar.add(Calendar.DAY_OF_MONTH, 1);
        }

        // mCalendarContainerLL.invalidate();//This is not working as expected.
        return dayCellSelected;
    }




invalidate