android onClickから外側の変数にアクセスしたい

広告

OnClickListenrを使ってボタンがクリックされたときの処理を書くとき。
規模や宗派は分かれるところですが、リスナーをimplementsさせたり、ボタン毎にOnClickListenerを用意するやり方は自分はしません。(処理が散らばるのが嫌だから)
自分は以下のように直接setOnClickListener()に無名クラスを渡す方法で実装する派です。
findViewById(R.id.save_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// クリックしたときの処理
}
});

しかーし、onClickの中から無名クラスの外側の変数はスコープできません。
// この変数をonClickの中で使いたい
int id = 1;

findViewById(R.id.save_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update(id); // 変数idはスコープできない
}
});

id変数をわざわざメンバ変数に持たせるのは嫌だし、拡張するのもめんどくさい。
このコンパクトな形で値を渡すやりかたは・・・?

【結論】
無名クラスに独自メソッド + メンバを実装をします。
こんな感じ。
// この変数をonClickの中で使いたい
int id = 1;

findViewById(R.id.save_bt).setOnClickListener(new View.OnClickListener() {
private int id;
@Override
public void onClick(View v) {
// クリック処理
update(id);
}
public View.OnClickListener setId(int id) {
this.id = id;
return this;
}
}.setId(id));


もっとシンプルに美しくやる方法があればぜひ教えてください。
お作法的なものもあるのかな・・・?
androidはチーム開発したことないのでベーシックな方法がわからん。
誰かヘルプ(;・∀・)
広告

Profile