Java 如何使用for循环中的接口

Java 如何使用for循环中的接口,java,android,loops,interface,inner-classes,Java,Android,Loops,Interface,Inner Classes,我在MainActivity类中有两个名为CalculatorClass和UpdatePayment的内部类。 在UpdatePayment类中,有一个for循环,我有一个数组的按钮。 我想向循环中的每个按钮添加侦听器。这些按钮将初始化计算器类,并获取计算值 演示代码是: public static class MainActivity{ private interface UpdateEditText{ void onCallback(String s); }

我在
MainActivity
类中有两个名为
CalculatorClass
UpdatePayment
内部类。
在
UpdatePayment
类中,有一个for循环,我有一个
数组
按钮
。 我想向循环中的每个按钮添加侦听器。这些按钮将初始化
计算器类
,并获取计算值

演示代码是:

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

                    );
                }
           }
     }
}
公共静态类main活动{
私有接口updateditext{
空回拨(字符串s);
}
“专用类计算器类扩展”对话框{
UPDATEDITTEXT UPDATEDITTEXT;
公共计算器接口(@NonNull上下文上下文,updateItemText updateItemText){
超级(上下文);
this.updateItemText=updateItemText;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
初始化();
}
初始化(){
.......................
s=“一些文本”;
UpdateDittext.onCallback;
}
}
“专用类UpdatePayment扩展”对话框{
私有按钮[]按钮=新按钮[100];
私有EditText[]EditText=新EditText[100];
公共计算器接口(@NonNull上下文){
超级(上下文);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.update);
初始化();
}
初始化(){
.......................
对于(int i=0;i
问题是行
editText[i].setText(s)
用于最后一个
editText
我单击的任何按钮,即我单击的任何按钮,都会填充
editText[MaxSize-1]

我该怎么办? 如何对所有
I
执行此操作?
请帮助我,我在internet上进行了大量搜索,但仍然没有找到任何解决方案。

匿名类在java中被视为静态变量。这是因为初始化活动后的I值等于1,小于编辑文本数组的长度。 editText[指示按钮点击].setText

您将通过以下方式获得按钮点击的标记: 使用此行“editText[i]=new editText(MainActivity.this);”下面的标记按钮,如下所示: 按钮[i]。设置标签(i)

要在button clicklisteners中检索实际单击的按钮的索引

  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回答正确。
谢谢他。

你是否已经用
findViewById(R.id.button)
初始化了你的按钮?是的,我在for循环中做了,但编程方式是button[I]=new button(main activity.this);谢谢,我在一分钟前,经过一整晚的尝试,才找到了我的解决方案。就像你建议的那样。我只是按照button[I].setId(I);然后是v.getId()顺便说一句,非常感谢你,亲爱的先生。