Обнаружение слушателя в месяц прокрутки в квадрате андроида

Я внедрил код для квадрат андроида в квадрате, но я не могу обнаружить событие, когда изменяется месяц. I have to highlight multiple range of dates from months.

Это то, как я это сделал, но я не могу обнаружить, когда месяц изменился при прокрутке

код:

public class Calender extends Activity implements OnDateChangeListener,CalendarCellDecorator {

String BOOKING_URL="http://www.example.com/app/webroot/mobile/booking.php";
ArrayList<String>list=new ArrayList<String>();
CalendarPickerView calender;
ArrayList<Date> dates = new ArrayList<Date>();
Calendar lastYear,nextYear;
Calendar today;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calender);

    getActionBar().setTitle("CALENDER");
    getActionBar().setIcon(R.drawable.back);
    getActionBar().setDisplayOptions(getActionBar().getDisplayOptions()| ActionBar.DISPLAY_SHOW_CUSTOM);
    ImageView imageView = new ImageView(getActionBar().getThemedContext());
    imageView.setScaleType(ImageView.ScaleType.CENTER);
    imageView.setImageResource(R.drawable.manu_btn);
    ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT| Gravity.CENTER_VERTICAL);
    layoutParams.rightMargin = 40;
    imageView.setLayoutParams(layoutParams);
    getActionBar().setCustomView(imageView);
    centerActionBarTitle();
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

    nextYear = Calendar.getInstance();
    nextYear.add(Calendar.YEAR, 2);

    lastYear= Calendar.getInstance();
    lastYear.add(Calendar.YEAR, -2);

    today = Calendar.getInstance();

    calender = (CalendarPickerView) findViewById(R.id.calendar);
    calender.setOnScrollListener(new OnScrollListener() {

        private int mLastFirstVisibleItem;

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {



            if(mLastFirstVisibleItem<firstVisibleItem)
            {
                Log.d("SCROLLING DOWN","TRUE");
            }
            if(mLastFirstVisibleItem>firstVisibleItem)
            {
                Log.d("SCROLLING UP","TRUE");

            }
            mLastFirstVisibleItem=firstVisibleItem;

        }   

    });


    calender1.init(lastYear.getTime(), nextYear.getTime());//.inMode(SelectionMode.RANGE);



    new MyAsyncTask(BOOKING_URL).execute();

}

.....


try {

            JSONArray array=new JSONArray(response);
            for (int i = 0; i < array.length(); i++) {

                JSONObject json=array.getJSONObject(i);
                list.add(json.getString("fromDate")+" "+json.getString("toDate"));

            }

            SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd");
            TimeZone gmt = TimeZone.getTimeZone("GMT");
            sdf.setTimeZone(gmt);
            sdf.setLenient(false);

            try {
                Date date = sdf.parse(list.get(0).split(" ")[0]);
                Date date1 = sdf.parse(list.get(0).split(" ")[1]);
                System.out.println(date);
                dates.add(date);
                dates.add(date1);
            } catch (Exception e) {
                e.printStackTrace();
            }                   

            calendar.init(lastYear.getTime(), nextYear.getTime()).inMode(SelectionMode.RANGE).withSelectedDates(dates);             

        } catch (JSONException e) {
            e.printStackTrace();

        }

....

@Override
public void decorate(CalendarCellView calendarCellView, Date date) {

    Log.d("TAG", "a"+date);

    if (date.getDate() < 5) {
        calendarCellView.setBackgroundResource(R.drawable.side_testi);
    } else {
        calendarCellView.setBackgroundResource(R.drawable.side_book);
    }
}

Ответ json:

[
    {
        "fromDate": "2014-03-03",
        "toDate": "2014-03-07",
        "name": "Anurag",
        "email": "[email protected]",
        "phone": "2147483647",
        "address": "Y-51, 3rd Floor, Sector 12",
        "comment": "I wanna view here."
    },
    {
        "fromDate": "2014-04-09",
        "toDate": "2014-04-09",
        "name": "Dana Edgar",
        "email": "[email protected]",
        "phone": "0",
        "address": "BHM Construction Inc.\r\n522 Walnut Avenue\r\nVallejo, CA 94592",
        "comment": "Primary guest will be Jeffery Mazet and his contact phone number is (530)601-0570. His email is [email protected]"
    },
    {
        "fromDate": "2015-02-09",
        "toDate": "2015-02-25",
        "name": "Ghfb",
        "email": "[email protected]",
        "phone": "2147483647",
        "address": "\nGffbbnn",
        "comment": "Dhgbngh"
    },
    {
        "fromDate": "2015-02-09",
        "toDate": "2015-02-25",
        "name": "Ghfb",
        "email": "[email protected]",
        "phone": "2147483647",
        "address": "\nGffbbnn",
        "comment": "Dhgbngh"
    },
    {
        "fromDate": "2015-06-04",
        "toDate": "2015-09-04",
        "name": "rewr",
        "email": "[email protected]",
        "phone": "2147483647",
        "address": "cbvcb",
        "comment": "vnbvbbm"
    }
]

расположение:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >

     <com.squareup.timessquare.CalendarPickerView
      android:id="@+id/calendar"
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      android:paddingLeft="16dp"
      android:paddingRight="16dp"
      android:paddingBottom="16dp"
      android:scrollbarStyle="outsideOverlay"
      android:clipToPadding="false"
      android:background="#FFFFFF"
      />


</LinearLayout>

enter image description here


проблемы подняты

Кажется, я чего-то не хватает. Любое предложение оценивается.

Ответы

Ответ 1

Используя CalendarCellDecorator, вы можете написать примерно следующее:

public class MonthDecorator implements CalendarCellDecorator {

    @Override
    public void decorate(CalendarCellView calendarCellView, Date date) {
        if (date.getDate() < 5) {
            calendarCellView.setBackgroundResource(R.drawable.red_background);
        } else {
            calendarCellView.setBackgroundResource(R.drawable.blue_background);
        }
    }
}

Это простой пример: первые 5 дней в каждом месяце будут иметь другой фон, чем остальные дни. Каждая ячейка в каждом месяце проходит через декоратор, поэтому вы можете использовать ее для изменения пользовательского интерфейса ячеек в течение нескольких месяцев. Как правило, вам нужно будет сохранить даты, которые должны быть выделены CalendarCellDecorator, а в методе decorate проверить, показывает ли данный cellView одну из этих дат. В моем случае я просто проверяю, есть ли дата до 5-го, но вы можете сделать там более значимую проверку - например, дать диапазон дат и проверить, является ли данная дата внутри этого диапазона, например.

EDIT: показано, как применить декоратор:

calendar.init(lastYear.toDate(), nextYear.toDate()).inMode(CalendarPickerView.SelectionMode.RANGE);
List<CalendarCellDecorator> decoratorList = new ArrayList<>();
decoratorList.add(new MonthDecorator());
calendar.setDecorators(decoratorList);