2014年6月25日水曜日

Android : CalendarView のエラー諸々 (* cannot be cast to android.widget.CalendarView$WeekView とか、ずっと GC が走ってアプリが起動しないとか)

Fragment 中に CalendarView を配置しようとしていたところ、なんだかいろいろなエラーが発生しました。

結論としては
  • 同じレイアウト中に android:id/list の id を持ったレイアウト(主にListViewに使われる id) があるとエラーが発生する
    • CalendarView 内の WeekView と何かが Conflict するのでしょうか…?
  • layout_height に wrap_content は使えない。match_parent、もしくは固定の高さである必要がある
といったところのようです。

参考 : Android CalendarView slowing down layout

以下、自分でいろいろ試した結果のメモです。

状態1

  • Fragment のルートのレイアウトは RelativeLayout
  • 同じ Fragment の layout 中には @android:id/list の id を持つ ListView が存在
  • CalendarView は ListView よりも上に配置
  • CalendarView の layout_height は wrap_content

結果

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.CalendarView$WeekView
が発生。


状態2

状態1から、CalendarView と ListView の配置を入れかえて CalendarView を下にする

結果

GC(Garbage Collection) が走り続けて、いつまでたってもアプリが起動しない


状態3

状態1から、ListView の id を @android:id/list から @+id/list に変更

結果

状態2と同じく、GC(Garbage Collection) が走り続けて、いつまでたってもアプリが起動しない


状態4

状態3から、CalendarView の layout_height を match_parent (もしくは固定の高さ 240dp 等)に変更

結果

アプリが起動するようになった。



0 件のコメント:

コメントを投稿