检测监听器上一个月滚动机器人时代广场 [英] Detect listener on month scrolling in android times square

查看:166
本文介绍了检测监听器上一个月滚动机器人时代广场的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了$ C $下机器人时代广场,但我无法检测到该事件的一个月变化的时候。 我要强调的多个日期范围从几个月

I have implemented code for android times square, but I am unable to detect the event when the month change. I have to highlight multiple range of dates from months.

这是我做的方式,但,我无法滚动的同时,以检测月份得到了改变。

This is the way I have done but, I am unable to detect when month got changed while scrolling

code:

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响应:

json response:

[
    {
        "fromDate": "2014-03-03",
        "toDate": "2014-03-07",
        "name": "Anurag",
        "email": "anuragk.evs@gmail.com",
        "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": "danae@bhmconstruction.com",
        "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 jeffm@bhmconstruction.com."
    },
    {
        "fromDate": "2015-02-09",
        "toDate": "2015-02-25",
        "name": "Ghfb",
        "email": "testxzy@gmail.com",
        "phone": "2147483647",
        "address": "\nGffbbnn",
        "comment": "Dhgbngh"
    },
    {
        "fromDate": "2015-02-09",
        "toDate": "2015-02-25",
        "name": "Ghfb",
        "email": "testxzy@gmail.com",
        "phone": "2147483647",
        "address": "\nGffbbnn",
        "comment": "Dhgbngh"
    },
    {
        "fromDate": "2015-06-04",
        "toDate": "2015-09-04",
        "name": "rewr",
        "email": "manish@gmail.com",
        "phone": "2147483647",
        "address": "cbvcb",
        "comment": "vnbvbbm"
    }
]


布局:


layout:

<?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>

提出的问题

https://github.com/square/android-times -square /问题/ 205

https://github.com/square/android-times -square /问题/ 135

看来我失去了一些东西。任何的建议是AP preciated。

It seems I am missing something. Any suggestion is appreciated.

推荐答案

使用 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天在每个月都会有一个不同的背景比天的休息。在每个月的每个细胞经过装饰,所以你可以用它来改变多个月的细胞的UI。 一般来说,你将不得不存储应当加以强调的日期 CalendarCellDecorator 装修方法检查是否与给定cellView正显示出这些日期的一种。在我来说,我只是检查日期是否为5日前,但你可以做一个更有意义的检查存在 - 即给一个日期范围,并检查给定的日期是否在这个范围内,例如

It is a simple example - the first 5 days in every month will have a different background than the rest of the days. Every cell in every month passes through the decorator, so you could use it to change the UI of cells in multiple months. Generally you'll have to store the dates which should be highlighted CalendarCellDecorator and in the decorate method check whether the given cellView is showing one of these dates. In my case I just check whether the date is before 5th, but you could make a more meaningful check there - i.e. give a range of dates and check whether the given date is inside this range for example.

编辑:展示如何应用装饰:

showing how to apply the decorator:

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

这篇关于检测监听器上一个月滚动机器人时代广场的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆