android TextWatcher 更改外部类私有字段
Posted
技术标签:
【中文标题】android TextWatcher 更改外部类私有字段【英文标题】:android TextWatcher changing outerclass private field 【发布时间】:2013-12-25 18:35:46 【问题描述】:我的 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 中执行具有传递引用效果的操作,或者我可以采取哪些其他方式将外部类变量传递给内部类并且该变量可以在内部类中更新?
【问题讨论】:
【参考方案1】:请记住,数组获取通过地址而不是值传递的值。也许您应该尝试以下方法:
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。 希望它适合您的需求。
【讨论】:
以上是关于android TextWatcher 更改外部类私有字段的主要内容,如果未能解决你的问题,请参考以下文章
TextWatcher上的Android Editable没有正确附加
Android listview item中使用TextWatcher