onClickListener中的变量值错误

时间:2016-08-27 16:51:25

标签: android android-layout android-linearlayout

我正在动态复制我的线性布局,我必须为线性布局中的按钮设置onClickListeners。

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));
       }
   });
}

除了我的按钮的文本总是设置为9之外,一切正常。我认为这是因为当调用监听器时,i的值当时为9。在按钮的监听器设置时我想要i的值,我不知道该怎么做。

我该如何解决这个问题?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

问题在于您将点击侦听器设置为相同的按钮(通过调用findViewById())连续10次。您获得值9,因为这是您添加到按钮的最后一次单击侦听器。

答案 1 :(得分: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));
           }
       });

    }

在上面的代码中,您需要在linearlayout中添加这些按钮。

希望这会对你有所帮助,

由于

答案 2 :(得分:0)

我不确定你想做什么但是:

就像@Shaishav所说,你正在使用相同的按钮(R.id.rent_number_up_btn),并且你正在替换点击监听器。循环结束前的最后一个值(你的计数器&#34; i&#34;)是9,这就是它一直显示9的原因。如果要在线性布局中添加10个按钮,只需在每次循环开始时创建新的按钮(上下文),并通过

将此按钮添加到布局中
yourLinearlayout.addView(yourNewButton);

然后,如果您将click listener设置为新按钮,它可能会显示不同的值:)