標記について、カレンダーの各日付代入の仕組みが分からず困っております。
該当ライブラリは以下のものです。
https://github.com/tyczj/ExtendedCalendarView
GridViewにセットするAdapterのコンストラクタ内で、
各セルに代入する値を算出するメソッドを呼び出しているというところまではわかっているのですが、
そのメソッドがいまいち理解できません。
以下に、その該当部分を引用いたします。
lang
1public class CalendarAdapter extends BaseAdapter{ 2 3 static final int FIRST_DAY_OF_WEEK =0; 4 Context context; 5 Calendar cal; 6 public String[] days; 7// OnAddNewEventClick mAddEvent; 8 9 ArrayList<Day> dayList = new ArrayList<Day>(); 10 11 public CalendarAdapter(Context context, Calendar cal){ 12 this.cal = cal; 13 this.context = context; 14 cal.set(Calendar.DAY_OF_MONTH, 1); 15 refreshDays(); 16 } 17 18 19/*------------------------中略----------------------*/ 20 21 public void refreshDays() 22 { 23 // clear items 24 dayList.clear(); 25 26 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH)+7; 27 int firstDay = (int)cal.get(Calendar.DAY_OF_WEEK); 28 int year = cal.get(Calendar.YEAR); 29 int month = cal.get(Calendar.MONTH); 30 TimeZone tz = TimeZone.getDefault(); 31 32 // figure size of the array 33 if(firstDay==1){ 34 days = new String[lastDay+(FIRST_DAY_OF_WEEK*6)]; 35 } 36 else { 37 days = new String[lastDay+firstDay-(FIRST_DAY_OF_WEEK+1)]; 38 } 39 40 int j=FIRST_DAY_OF_WEEK; 41 42 // populate empty days before first real day 43 if(firstDay>1) { 44 for(j=0;j<(firstDay-FIRST_DAY_OF_WEEK)+7;j++) { 45 days[j] = ""; 46 Day d = new Day(context,0,0,0); 47 dayList.add(d); 48 } 49 } 50 else { 51 for(j=0;j<(FIRST_DAY_OF_WEEK*6)+7;j++) { 52 days[j] = ""; 53 Day d = new Day(context,0,0,0); 54 dayList.add(d); 55 } 56 j=FIRST_DAY_OF_WEEK*6+1; // sunday => 1, monday => 7 57 } 58 59 // populate days 60 int dayNumber = 1; 61 62 if(j>0 && dayList.size() > 0 && j != 1){ 63 dayList.remove(j-1); 64 } 65 66 for(int i=j-1;i<days.length;i++) { 67 Day d = new Day(context,dayNumber,year,month); 68 69 Calendar cTemp = Calendar.getInstance(); 70 cTemp.set(year, month, dayNumber); 71 int startDay = Time.getJulianDay(cTemp.getTimeInMillis(), 72 TimeUnit.MILLISECONDS.toSeconds(tz.getOffset(cTemp.getTimeInMillis()))); 73 74 d.setAdapter(this); 75 d.setStartDay(startDay); 76 77 days[i] = ""+dayNumber; 78 dayNumber++; 79 dayList.add(d); 80 } 81 }
わからない部分は、
・finalで0宣言されたFIRST_DAY_OF_WEEKを、days配列の長さ、およびempty daysの計算に使っている意味。
(0なのだから計算式に入れても意味がないのではないか)
・populate empty days~内でfirstDay(DAY_OF_WEEK)を使って場合分けをしているが、1~7までしかないのに
elseの部分はどういう場合に呼ばれるのか
の2点です。
2点目に関しては、同様のカスタムカレンダービューを調べている中で同じような記述を見たので
一般的なものだとは思っているのですが・・・
数ヶ月前にぶつかってから、動かす分にはもちろん問題がないのである程度は気にせずにいました。
ですが、やはり使う以上は仕組みを理解していないと話にならないと思い、
WEB検索をしたり実際の年月日を例にして手計算で書き出したりしてみたのですが、わかりませんでした。
壮大な勘違いをしているのかもしれませんが、にっちもさっちもいかなくなってしまったので
この若輩者にどうかお力をお貸しください。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/15 13:43