2016-08-27 8 views
-1

私は線形レイアウトを動的に複製しており、線形レイアウト内のボタンに対してonClickListenersを設定する必要があります。onClickListenerで間違った変数値があります

for(int i = 0; i <10 ; i++){ 

    // other code here 

    Button approve_btn = (Button) findViewById(R.id.rent_number_up_btn); 
    approve_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      approve_btn.setText(String.valueOf(i)); 
     } 
    }); 
} 

すべてが、私は、リスナーが呼び出されたときにiの値が、その時点で9であるので、それはだと思う私のボタンのテキストは常に9に設定されていることを除いて正常に動作します。ボタンのリスナーが設定されている時点で私がiの価値を望んでいて、それをどうするかわからない。

どうすればこの問題を解決できますか?どんな助けもありがとうございます。

+0

ご質問について詳しくご説明ください。私は理解していなかった –

答えて

1

問題は、クリックリスナーを同じボタン(findViewById()を呼び出して)に10回連続して設定することです。値が9になるのは、ボタンに最後に追加したクリックリスナーだからです。

+0

正しい+1 – Sniper

0
for(int i = 0; i <10 ; i++){ 

     // other code here 

       Button button = new Button(<Activity Instance>); 
      button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     approve_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       approve_btn.setText(String.valueOf(i)); 
      } 
     }); 

    } 

上記のコードでは、これらのボタンをリニアレイアウトに追加する必要があります。これはあなたを助ける

希望、

おかげ

0

私はあなたが何をしたいのかわからないけど:

よう@Shaishavはあなたが同じボタンを使用していると述べた(R.id.rent_number_up_btn)お互いの上にクリックリスナーを置き換えています。あなたのループフィニッシュ前の最後の値(カウンター "i")は9です。そのため、常に9を表示しています。あなたはリニアレイアウト内の10個のボタンを追加したい場合は、単にたびに新しいボタン(コンテキスト)を作成するときに、あなたのループが開始され、あなたは多分あなたの新しいボタンにリスナーをクリックして設定した場合、その後

yourLinearlayout.addView(yourNewButton); 

を経由して、あなたのレイアウトにこのボタンを追加異なる値が表示されます:)

関連する問題