2013年4月26日金曜日

[Android] Toastを自分で作ったThreadから表示させる


Toastを自分で作ったThreadから表示させようと思ったらエラーになった。
{まあ、UI Threadじゃないしな}
と思い、ググってみると、そういうわけでもなくLooperなるオブジェクトがあればいいらしい、その辺りの素晴らしい解説が、下のページ

  【Android】 UIスレッドとは別スレッドからのToastの表示

にあって通常そこで終了なのだけど、Looperを取得するために作るHandlerThreadをstart()させた後、quit()するうまいタイミングがないなあと思っていた。
ところが、ApplicationクラスにgetMainLooper()なんてのを見つけたので、使ってみたらうまくいったのでメモ。

Applicationを取得するのには、Activity.getApplication()があるが、今回は違うクラスから別スレッドで動かしたかったので、以下のようにした。

public class MyApplication extends Application {
  static private MyApplication _app;

  @Override
  public void onCreate() {
    super.onCreate();
    _app = this;
  }

  static public MyApplication getApplication() {
    return _app;
  }
}

これを使って、好きなスレッドから、下の関数を呼んで表示成功。

private void displayToast(final String msg) {
  Handler h = new Handler(MyApplication.getApplication().getMainLooper());
  h.post(new Runnable() {
    @Override
    public void run() {
      Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();
    }
  });
}

2013年4月24日水曜日

macでアプリケーションフォルダからフォルダを移動する方法


ずっとwindowsマシンばっかり使っていたが、事情があってmacを使い始めた。
しかし、まだ使い方がぜんぜんわかっていない。
なので、これからメモ的にmacの使い方をちょこちょこ書くかもしれない。

で、早速困った件。
Finderを使っていて、アプリケーションフォルダに間違ってドラッグアンドドロップでフォルダを「ぽとっ」と落としてしまった後、ドラッグアンドドロップで救出しようと思ったら元に戻せない。
「あれっ?」

移動しようと思っても、リンクが作成されるだけで、移動できない。
「んー。困ったぜ」
で、二本指クリックでメニューを出してみたが、コピーはあるけど移動はない。
さらに、windows的に、キーボードで⌘xから⌘vとかやってみたが無駄。
{ぷるぷるぷるぷるっ}

で、とりあえず解決編。
一度、ゴミ箱に入れてから、ゴミ箱を開いてドラッグアンドドロップで元に戻った。

絶対もっとまともな方法があるはずなので、誰か知ってたら教えてください。