gpt4 book ai didi

java - android TextWatcher 改变外部类私有(private)字段

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:24 24 4
gpt4 key购买 nike

我的 MainFragment 中有多个 String 变量和 EditText 变量。对于所有 EditText,我希望我的字符串变量在 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 中有很多 EditText。我正在考虑创建一个 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 中执行具有传递引用效果的操作,或者我可以采取哪些其他方法将外部类变量传递给内部类并且该变量可以在内部类中更新?

最佳答案

请记住,数组获取的是通过地址传递的值,而不是通过值传递的值。也许你应该尝试这样的事情:

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。希望它能满足您的需求。

关于java - android TextWatcher 改变外部类私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com