記事一覧

Workspace currupted!!

I had got an error while Eclipse was saving my workspace, and it had damaged the workspace file. As result everything seemed to have disappeared.
In my case the solution was pretty easy, just "import" my projects from the menu.
But one thing made me upset is: just when I have imported project no Perspective was opened and still nothing seen on the workspace. Selected Window > Open Perspective to open one and everything is back as before.

Eclipse が異常終了してしまった際にワークスペースが壊れてしまい、起動しても何も表示されなくなってしまいました。
今回のケースでは解決方法は簡単で、単にプロジェクトの import を行えばよい、というものだったんですが、一瞬青ざめたのが、インポートしたばかりのときは Perspective が開かれておらず、したがってプロジェクトは読み込んだもののワークスペースには何も現れない、という状態だった点。
Window > Open Perspective で Javaパースペクティブなりを開いたらちゃんと元通りになりました。

onKeyDown --> get KEYCODE_BACK no longer works

Android API changes very quickly.
Searching on the web about how to override the functionality of device's back button you'll find the code like this:


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_BACK ) {
// do something;
}
return true;
}

But this seems no longer work on Android 2.x
I followed a suggestion found on the web to have done like this instead.

@Override
public void onBackButton(){
// do something;
}

You'd better watch out when googl'ing because lots of obsolete information will come upwards in search results because they are not old enough to be hidden by new information.


Android APIの変化は早いですね。
さっき端末の戻るボタンを乗っ取る方法を調べてたんですが、多くのページが


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_BACK ) {
// do something;
}
return true;
}

という感じのコードを載せてる。でもこれって 2.x では動かないらしい。もうちょい調べて出てきたこういうコードで動きました。

@Override
public void onBackButton(){
// do something;
}

Web上では、1.x系の情報もまだ十分に「古くなりきってない」感じなので、けっこう検索の上位に出てきてしまいます。
この手の話をググるときは気をつけた方が良さそうですね。

Catching MotionEvent.ACTION_MOVE / UP

In my current Android app I have several customized views that inherit View Class.
Each of them overrides onTouchEvent and tracks touch movements.
But one of them cannot catch MotionEvent.ACTION_MOVE and UP, while others can.

I did about one hour of try & errors to find that, if you return false for onTouchEvent's return value when you caught MotionEvent.ACTION_DOWN, tracking of touch event finishes and is no longer performed until your next touch.
I modified my code to return true when needed and it worked.

It may mean "You returned false? OK, this touch is something you don't need to care about, right? You'll never get troubled even if I stop giving further information about it."
It's understandable but...

今手がけているAndroidアプリでは、Viewクラスをカスタマイズしたクラスをいくつか使っているのだけど、そのうちのひとつのクラスだけがタッチイベントの MotionEvent.ACTION_MOVE と UP を取れない、という現象に遭遇。
他はちゃんと取れてるのになんでや?と思って悩むこと1時間あまり、やっと発見したのが、最初に MotionEvent.ACTION_DOWN を受け取ったとき、onTouchEventの戻り値に false を返してしまうと、タッチの動作をそれ以上追いかけるのをやめてしまうようなのだ。
しかるべき時にちゃんと trueを返すようにしたらうまくいきました。

これってつまり「false返したってことはこのタッチは要らないんだよね?じゃあそれ以降情報渡すのやめるから!」ってことなんでしょうね。わからんでもないが・・・。