どのように私は、動的に作成したボタンのonClickListener管理することができますか?

ソフト:

私は、ユーザーが選択したオプションに基づいてボタンを作成「n」をしようとしています。私が押されたボタンに応じて、変数を更新しようとしたとき、私は難しさを抱えているが、ボタンは1から3の範囲とすることができます。これは、エラー「最終または効果的に最終でなければなりませんラムダ式で使用する変数」を与えます。私は、エラーを理解するが、私はこの問題を解決する方法を見つけ出すことはできません。ここに私のサンプルコードは次のとおりです。

        for (int i = 0; i < options; i++) {
            Button button = new Button(this);
            button.setId(position);
            buttons[i] = button;
            buttons[i].setOnClickListener(v -> {
                tempToMaintain.setValue(listParameters.get(i));

            });
        }

「オプションは」を作成するためにボタンの数が含まれている、tempToMaintainがFirebaseから参照される変数です。私は、リストから値を取得し、Firebaseにそれを更新しようとしています。どのように私はこれを達成することができ、任意のヘルプは大歓迎です。

alainlompo:

Javaで、あなたは非最終(とも使用することができない非効率的に、最終ラムダならびに匿名内部クラスで)変数を。

あなたは、実装するクラスを作成することにより、ラムダ式を取り除くことができView.OnClickListenerインターフェイスをして、変数にそれを与える私をコンストラクタのパラメータとして。

例えば:

class MyButtonClickListener implements View.OnClickListener {
   private int parameterIndex;

   public MyButtonClickListener(int parameterIndex) {
      this.parameterIndex = parameterIndex;
   }

   public void onClick(View v) {
      tempToMaintain.setValue(listParameters.get(parameterIndex));
   }
}

そして、それはそれでなければなりません。tempToMaintainlistParametersコンストラクタのパラメータとして(我々が行ったようparameterIndex)新しいクラスのインスタンスは、文脈にそれらにアクセスすることができない場合。

今、あなたのような外観にclickListenerイベントハンドラへの結合を変更することができます。

for (int i = 0; i < options; i++) {
   Button button = new Button(this);
   button.setId(position);
   buttons[i] = button;
   buttons[i].setOnClickListener(new MyButtonClickListener(i));
}

お役に立てれば。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=292650&siteId=1