Android
AndroidSDK
android開発

Layoutをいじっただけor今まで動いてたのにClassCastExceptionが出て困っている方々へ

何気ない、Androidではよく書くこんな記述。

    _checkbutton = (CheckBox) findViewById(R.id.checkbutton);
    _checkbutton.setChecked(true);

自分の場合は、CheckBoxだけじゃなくLinerLayoutのVisibleを変更させるだけのためにキャストなど
動いていたものが突然ClassCastExceptionを吐いて動かなくパターンなのですが
しかもonCreate()で・・

こういうパターンでClassCastExceptionを吐くなら

    LinearLayout mLinearLayout_main = (LinearLayout) findViewById(R.id.linearLayout_main);
    mLinearLayout_main.setVisibility(View.VISIBLE);

Castしなきゃいんだろ!と怒りながら

    findViewById(R.id.linearLayout_main).setVisibility(View.VISIBLE);

と書き換えますが、
CheckBoxのsetCheckedとかはCastしてからじゃないと扱えない・・

ちまちまLayoutをいじってると治ったり、
1dpなLinerLayoutを挿入して騙し騙し動かしてたのですが、
それでもまた動かなくなることが有って散々悩んでいた・・・
ふとおもって対応したのが以下のようなコード

    findViewById(R.id.checkbutton).post(new Runnable() {
        @Override
        public void run() {
            _checkbutton = (CheckBox) findViewById(R.id.checkbutton);
            _checkbutton.setChecked(true);
        }
    });

俗に言うUIスレッド云々かもですね
今のところこういう書き方にした所ClassCastExceptionは吐かなくなってます
悩んでる方お試しを・・

つーか、キャスト連発させるのって何なんでしょうね?