我的MainFragment中有多个String变量和EditText变量。对于所有的EditText,我希望我的String变量能够在EditText的文本更改后得到值。目前我就是这样做的:
private String itemName;
private String itemNumber;
private EditText itemNameET;
private EditText itemNumberET;
private void initEditTexts() {
itemName = itemNameET.getText().toString();
itemNumber = itemNumberET.getText().toString();
itemNameET.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
itemName = (String) s.toString();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {}
});
itemNumberET.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
itemNumber = (String) s.toString();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {}
});
我想尝试删除冗余代码,因为我在Activity中有很多EditTexts。我正在考虑创建一个CustomTextWatcher:
public class CustomTextWatcher implements TextWatcher {
private String text;
public CustomTextWatcher(String text) {
this.text = text;
}
@Override
public void afterTextChanged(Editable s) {
text = (String) s.toString();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {}
}
但是这样做不会起作用,因为外部类变量仍未分配新值,因为它是按值传递的。我将如何在Java中执行具有pass-by-reference效果的东西,或者我可以采用哪些其他方法将outerclass变量传递给innerclass,并且该变量可以在innerclass中更新?
答案 0 :(得分:0)
请记住,数组获取地址传递的值,而不是值。也许你应该尝试类似的东西:
public class CustomTextWatcher implements TextWatcher {
private String [] text;
public CustomTextWatcher(String[] text) {
this.text = text;
}
@Override
public void afterTextChanged(Editable s) {
text[0] = (String) s.toString();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {}
}
当然,您应该始终注意验证数组的大小以避免NullPointerException。 希望它符合您的需求。