AndroidでBeans Binding(JSR295)は使えるか?
ぼーっとAndroidのJavaDocを眺めているとPropertyChangeListenerがあることに気がつきました。ということは、もしかしてBeans Binding(JSR295)も、使えるのかなと思い試してみました。
というわけで、さっそくViewを作って、コードを書こうとしたのですが、
あ、
EditTextにもTextViewにもPropertyChangeListenerを登録できない。。。
いきなり結論がでました。Beans Bindingは使えない。(Viewを作る前に気づくべきです。)
仕方ないので別の方法でお茶をにごすテスト。(addTextChangedListenerでテキストの変更は監視できるようです。)
package net.hakkaku.android.binding;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
public class BindingTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((EditText) findViewById(R.id.edit))
.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
((TextView) findViewById(R.id.text)).setText(s);
}
});
}
}
一応、目的の動作はできたけれど・・・
ViewにPropertyChangeListerをセット出来ないのは、ちょっとショックでした。ただ、AndroidのViewは、設定できるプロパティの数も多く、PropertyChangeListenerをサポートしてまうと、頻繁にリスナが呼ばれることになり、パフォーマンス上問題があるのかなとも思いました。
また、バイトコードをコネコネしたりAOPを使えば無理矢理PropertyChangeListerを登録できるかもしれませんが、必要に迫られている訳でもないので、そこまでは試していません。いつか、暇なときにでもやってみたいと思います。
このサイトについて
TrackBack URL :
