如何使用 for 循环中的接口

How can I use interface from a for loop

我在 MainActivity class 中有两个 inner classes 名为 CalculatorClassUpdatePayment。 在 UpdatePayment class 中有一个 for 循环,我有一个 array of 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 执行此操作? 请帮助我,我尝试了很多在互联网上搜索,仍然没有得到任何解决方案。

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

如何获得点击按钮的指标是: 将标签设置到此行“editText[i] = new EditText(MainActivity.this);”下方的按钮,如下所示: 按钮[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.

解决方案:

折腾了一个晚上,得到了答复,现在感觉哇哇,好简单啊! 我从来没想过

button[i].setId(i);

然后调用:

CalculatorClass calculator = new CalculatorClass(MainActivity.this, v.getId(),
                            new UpdateEditText() {
                                @Override
                                public void onUpdate(String s, int ID) {
                                    Log.i("test", ID + "");
                                    editText[ID].setText(s);
                                }
                            });

同时,@Rishabh Ritweek 回答正确。 感谢他。