如何使用 for 循环中的接口
How can I use interface from a for loop
我在 MainActivity
class 中有两个 inner classes
名为 CalculatorClass
和 UpdatePayment
。
在 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 回答正确。
感谢他。
我在 MainActivity
class 中有两个 inner classes
名为 CalculatorClass
和 UpdatePayment
。
在 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 回答正确。 感谢他。