Android の、こうであって欲しいところ:startActivityForResult のインターフェイス
なんかあの、startActivityForResult と onActivityResult による処理の分断感と、requestCode まわりの感じが気持ちわるくてしかたないので、以下のようなインターフェイスならいいのになあ……とよく思うんですが、こうなってないのはなんででしょうかね……
startActivityForResult(intent, new ActivityResultHandler() {
public void run (int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
}
}
});実装自体は簡単なんですが、Java は mix-in できないので使いにくいのですよね……
interface ActivityResultHandler {
void run (int resultCode, Intent data);
}
protected HashMap<Integer, ActivityResultHandler> mActivityResultHandlers = new HashMap<Integer, ActivityResultHandler>();
protected void startActivityForResult(Intent intent, ActivityResultHandler handler) {
int code = handler.hashCode();
mActivityResultHandlers.put(code, handler);
startActivityForResult(intent, code);
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
ActivityResultHandler handler = mActivityResultHandlers.remove(requestCode);
handler.run(resultCode, data);
}