英文:
How can I use interface from a for loop
问题
我在MainActivity
类中有两个名为CalculatorClass
和UpdatePayment
的内部类
。
在UpdatePayment
类中有一个for循环,我有一个按钮数组
。
我想在循环中为每个按钮添加监听器。这些按钮将初始化CalculatorClass
并获取计算值。
演示代码如下:
public static class MainActivity {
private interface UpdateEditText {
void onCallback(String s);
}
private class CalculatorClass extends Dialog {
UpdateEditText updateEditText;
public CalculatorClass(@NonNull Context context, UpdateEditText updateEditText) {
super(context);
this.updateEditText = updateEditText;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
initialize();
}
private void initialize() {
// .............
String s = "一些文本";
updateEditText.onCallback(s);
}
}
private class UpdatePayment extends Dialog {
private Button[] button = new Button[100];
private EditText[] editText = new EditText[100];
public UpdatePayment(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.update);
initialize();
}
private void initialize() {
// .............
for (int i = 0; i < MAXSize; i++) {
button[i] = new Button(MainActivity.this);
editText[i] = new EditText(MainActivity.this);
// 将按钮添加到布局视图
button[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final int index = i;
CalculatorClass calculator = new CalculatorClass(MainActivity.this,
new UpdateEditText() {
@Override
public void onCallback(String s) {
editText[index - 1].setText(s);
}
});
calculator.show();
}
});
}
}
}
}
问题是editText[i].setText(s)
这行代码对于无论我点击哪个按钮,都只对最后一个editText
起作用,即,无论我点击哪个按钮,它都填充到editText[MaxSize -1]
。
我应该怎么做?
如何为所有的i
执行此操作?
请帮帮我,我在互联网上尝试了很多搜索,但仍然没有找到解决方案。
英文:
I have two inner classes
named CalculatorClass
and UpdatePayment
in MainActivity
class.
In UpdatePayment
class there is a for loop and I have a array
of Buttons
.
I want to add listener to each button in loop. Those buttons will initialize the CalculatorClass
and get value of calculations.
Demo code is:
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();
}
);
}
}
}
}
Problem is the line editText[i].setText(s)
work for the last editText
what ever button I click, i.e, any button I click, it fills the editText[MaxSize -1]
What should I do?
How can I perform this action for all i
?
Please help me, I tried a lot searching in internet, still I didn't get any solution.
答案1
得分: 0
匿名类在Java中很类似于静态变量。这是因为在初始化活动后,您的i
值等于编辑文本数组的长度减1。
editText[indicies_of_button_clicked].setText(s);
要获取按钮点击的索引,可以这样做:
在此行下面为按钮设置标签,就像这样:
button[i].setTag(i);
要在按钮点击侦听器内获取实际点击的按钮索引,
v.getTag(); // 这将为您提供一个整数值,该值将是实际按钮点击的索引
// 使用此值设置您的编辑文本值。
英文:
Anonymous classes are very much treated like static variables in java.It's happenning because your i value after your activity is initialized is equal to 1 less than the length of the edit text array.
editText[indicies_of_button_clicke].setText(s)
How you will get the indicies of button clicked is by :
se the tag to button below this line "editText[i] = new EditText(MainActivity.this);", like this :
button[i].setTag(i)
to retreive the index of your actual button clicked inside 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.
答案2
得分: 0
解决方案:
经过一个整晚,我得到了答案,现在我感觉,噢,这很简单!我从未想过这一点。
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 的回答也是正确的。
感谢他。
英文:
Solution:
After a whole night, I got answer, now I feel awwww, this was easy go!
I never came in this thought.
button[i].setId(i);
then call:
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);
}
});
At the same time, @Rishabh Ritweek answered correctly.
Thanks to him.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论