質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

解決済

tyczj氏のExtendedCalendarViewにおける日付代入の仕組みについて

Knsk
Knsk

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

1回答

0評価

0クリップ

1846閲覧

投稿2015/04/14 10:10

標記について、カレンダーの各日付代入の仕組みが分からず困っております。
該当ライブラリは以下のものです。

[https://github\.com/tyczj/ExtendedCalendarView\]\(https://github\.com/tyczj/ExtendedCalendarView\)

GridViewにセットするAdapterのコンストラクタ内で、
各セルに代入する値を算出するメソッドを呼び出しているというところまではわかっているのですが、
そのメソッドがいまいち理解できません。
以下に、その該当部分を引用いたします。

lang

public class CalendarAdapter extends BaseAdapter{ static final int FIRST_DAY_OF_WEEK =0; Context context; Calendar cal; public String\[\] days; // OnAddNewEventClick mAddEvent; ArrayList<Day> dayList = new ArrayList<Day>\(\); public CalendarAdapter\(Context context, Calendar cal\){ this\.cal = cal; this\.context = context; cal\.set\(Calendar\.DAY_OF_MONTH, 1\); refreshDays\(\); } /\*------------------------中略----------------------\*/ public void refreshDays\(\) { // clear items dayList\.clear\(\); int lastDay = cal\.getActualMaximum\(Calendar\.DAY_OF_MONTH\)\+7; int firstDay = \(int\)cal\.get\(Calendar\.DAY_OF_WEEK\); int year = cal\.get\(Calendar\.YEAR\); int month = cal\.get\(Calendar\.MONTH\); TimeZone tz = TimeZone\.getDefault\(\); // figure size of the array if\(firstDay==1\){ days = new String\[lastDay\+\(FIRST_DAY_OF_WEEK\*6\)\]; } else { days = new String\[lastDay\+firstDay-\(FIRST_DAY_OF_WEEK\+1\)\]; } int j=FIRST_DAY_OF_WEEK; // populate empty days before first real day if\(firstDay>1\) { for\(j=0;j<\(firstDay-FIRST_DAY_OF_WEEK\)\+7;j\+\+\) { days\[j\] = ""; Day d = new Day\(context,0,0,0\); dayList\.add\(d\); } } else { for\(j=0;j<\(FIRST_DAY_OF_WEEK\*6\)\+7;j\+\+\) { days\[j\] = ""; Day d = new Day\(context,0,0,0\); dayList\.add\(d\); } j=FIRST_DAY_OF_WEEK\*6\+1; // sunday => 1, monday => 7 } // populate days int dayNumber = 1; if\(j>0 && dayList\.size\(\) > 0 && j != 1\){ dayList\.remove\(j-1\); } for\(int i=j-1;i<days\.length;i\+\+\) { Day d = new Day\(context,dayNumber,year,month\); Calendar cTemp = Calendar\.getInstance\(\); cTemp\.set\(year, month, dayNumber\); int startDay = Time\.getJulianDay\(cTemp\.getTimeInMillis\(\), TimeUnit\.MILLISECONDS\.toSeconds\(tz\.getOffset\(cTemp\.getTimeInMillis\(\)\)\)\); d\.setAdapter\(this\); d\.setStartDay\(startDay\); days\[i\] = ""\+dayNumber; dayNumber\+\+; dayList\.add\(d\); } }

わからない部分は、

・finalで0宣言されたFIRST_DAY_OF_WEEKを、days配列の長さ、およびempty daysの計算に使っている意味。
(0なのだから計算式に入れても意味がないのではないか)

・populate empty days~内でfirstDay(DAY_OF_WEEK)を使って場合分けをしているが、1~7までしかないのに
elseの部分はどういう場合に呼ばれるのか

の2点です。

2点目に関しては、同様のカスタムカレンダービューを調べている中で同じような記述を見たので
一般的なものだとは思っているのですが・・・

数ヶ月前にぶつかってから、動かす分にはもちろん問題がないのである程度は気にせずにいました。
ですが、やはり使う以上は仕組みを理解していないと話にならないと思い、
WEB検索をしたり実際の年月日を例にして手計算で書き出したりしてみたのですが、わかりませんでした。

壮大な勘違いをしているのかもしれませんが、にっちもさっちもいかなくなってしまったので
この若輩者にどうかお力をお貸しください。よろしくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。