繁体   English   中英

如何使用 for 循环中的接口

[英]How can I use interface from a for loop

我在MainActivity class 中有两个名为CalculatorClassUpdatePaymentinner classes 。在UpdatePayment class 中有一个 for 循环,我有一个Buttons array 我想在循环中为每个按钮添加监听器。 这些按钮将初始化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执行此操作? 请帮助我,我在 inte.net 中尝试了很多搜索,但仍然没有得到任何解决方案。

匿名类非常像 java 中的 static 变量一样对待。它的发生是因为你的 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.

解决方案:

整整一个晚上后,我得到了答案,现在我觉得哇,这很容易go。我从来没有想到过。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM