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()顺便说一句,非常感谢你,亲爱的先生。