Java android TextWatcher更改outerclass私有字段

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

我的MainFragment中有多个字符串变量和EditText变量。对于所有EditText,我希望我的字符串变量在EditText的文本更改后获得assignd值。目前我是这样做的:

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。 希望它适合你的需要