UIを変更する時に落ちるのでHandlerを使う。

前に記事にしていたと思ったのですが、自分でエラー発生時に自分のブログを見たら書いてなかったので、簡単な内容ですが記事にします。

 

/*————–
問題点
—————*/

メインのThread以外で、UIを変更するとアプリが落ちます。

例)

linearLayout4.setVisibility(View.VISIBLE);を呼び出す。

クリックなどでVisibleを変更しようとした場合に落ちます。

 

/*—————
解決方法
—————*/

Handlerを用いる。

Handler mHandler;
mHandler = new Handler();

上記のようにhandlerを作ります。

実行

new Thread(new Runnable() {
 public void run() {
 mHandler.post(new Runnable() {
 public void run() {
 linearLayout4.setVisibility(View.VISIBLE);
 }
 });
 }
}).start();

上記のようにすると、Thread内で別のThreadを読み込むという(?)ちょっと理解でききれてない自分がいるのですが、問題なく変更ができました。

 

/*————
注意点
—————*/

上記のHandlerを使う時の注意点は

1、handlerの中で実行をするのは、UIの変更だけで、余計な処理をまとめていれない。

落ちます。Handlerの中に入れる必要ないものは、いれないようにしましょう。

 

2、直近にHandlerを作らない。

上記のデータで、Handlerを部分で利用したいだけなので、

Handler mHandler = new Handler();
new Thread(new Runnable() {
 public void run() {
 mHandler.post(new Runnable() {
 public void run() {
 linearLayout4.setVisibility(View.VISIBLE);
 }
 });
 }
}).start();

上記のデータをコピペして貼り付けると、エラーが起きました。

どうやらHandlerは、あらかじめ作成しておく必要があるようです。

僕はonCreateの中に作って、mHandlerをあらかじめ作成しておいたらできました。

 

以上です。

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑