[英]In a Java interface, how can I *not* use one particular method inherited from a parent interface?
[英]How can I use interface from a for loop
我在MainActivity
class 中有两个名为CalculatorClass
和UpdatePayment
的inner 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.