Java android TextWatcher更改outerclass私有字段
我的MainFragment中有多个字符串变量和EditText变量。对于所有EditText,我希望我的字符串变量在EditText的文本更改后获得assignd值。目前我是这样做的:Java android TextWatcher更改outerclass私有字段,java,android,pass-by-reference,pass-by-value,Java,Android,Pass By Reference,Pass By Value,我的MainFragment中有多个字符串变量和EditText变量。对于所有EditText,我希望我的字符串变量在EditText的文本更改后获得assignd值。目前我是这样做的: private String itemName; private String itemNumber; private EditText itemNameET; private EditText itemNumberET; private void initEditTexts() { itemName
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) {}
});
我想尝试删除多余的代码,因为我在活动中有很多编辑文本。我正在考虑创建一个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) {}
}
但是这将不起作用,因为outerclass变量仍然没有被分配新值,因为它是按值传递的。我将如何在Java中执行具有“按引用传递”效果的操作,或者我可以通过哪些其他方式将outerclass变量传递给innerclass,并且该变量可以在innerclass中得到更新?请记住,数组获取的值是按地址传递的,而不是按值传递的。也许你应该试试这样:
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。
希望它适合你的需要