首页 > 解决方案 > 如何使用 for 循环中的接口

问题描述

我有两个inner classes命名CalculatorClassUpdatePaymentMainActivity。在UpdatePayment课堂上有一个 for 循环,我有一个arrayof Buttons. 我想为循环中的每个按钮添加监听器。这些按钮将初始化CalculatorClass并获取计算值。

演示代码是:

public static class MainActivity{

    private interface UpdateEditText{
       void onCallback(String s);
    }
 
     private class CalculatorClass extends Dialog{
         UpdateEditText updateEditText;
         public CalculatorInterface(@NonNull Context context, UpdateEditText updateEditText) {
            super(context);
            this.updateEditText = updateEditText;
         }

           @Override
           protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.calculator);
                 initialize();
           }
           initialize(){ 
              .......................
              s = "Some texts";
              updateEditText.onCallback(s);
           }
     }

     private class UpdatePayment extends Dialog{
         
             private Button[] button = new Button[100];
             private EditText[] editText = new EditText[100];

             public CalculatorInterface(@NonNull Context context) {
                super(context);
             }

             @Override
             protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.update);
                 initialize();
             }
             initialize(){ 
                .......................
                for(int i = 0; i < MAXSize; i++){
                    button[i] = new Button(MainActivity.this);
                    editText[i] = new EditText(MainActivity.this);
                    //add buttons to view to layout
                    button[i].setOnclickListener(new View.OnClickListener(){
                    
                         public void onClick(View v) {
                             CalculatorClass calculator = new 
                                           CalculatorClass(MainActivity.this,
                                                    new UpdateEditText() {
                                 @Override
                                 public void onCallback(String s) {
                                     editText[i - 1].setText(s);
                                 }
                            });
                            calculator.show();
                          }

                    );
                }
           }
     }
}

问题是我点击的最后一个按钮的线路editText[i].setText(s)工作editText,即我点击的任何按钮,它填充editText[MaxSize -1]

我应该怎么办?如何为所有人执行此操作i?请帮助我,我在互联网上尝试了很多搜索,但我仍然没有得到任何解决方案。

标签: javaandroidloopsinterfaceinner-classes

解决方案


匿名类在 java 中被视为静态变量。这是因为初始化活动后的 i 值等于 1 小于编辑文本数组的长度。editText[indicies_of_button_clicke].setText(s)

您将如何获得单击按钮的指示是:将标签设置为此行下方的按钮“editText[i] = new EditText(MainActivity.this);”,如下所示:button[i].setTag(i)

检索在按钮点击侦听器中点击的实际按钮的索引,

  v.getTag()// this will give you an integer value which will be the indices of actual button clicked
           //use this value to set your edit text value.

推荐阅读