java - 如何修复 EditText 的 getText 方法的覆盖
问题描述
我正在尝试从 EditText(扩展 TextView)中覆盖 getText() 方法。我需要检查谁在调用我的自定义方法,如果所有检查都通过了,则调用“原始”EditText.getText()。
问题在于我的自定义方法被多次调用,直到向我抛出 OOM 错误,请注意我的自定义方法还没有从任何地方调用。
这是代码:(上述检查不在此处,我刚刚粘贴了原始的 EditText.getText 实现作为替代,但问题仍然存在)
public class CustomEdit extends EditText {
public CustomEdit(Context context) {
this(context, null);
}
public CustomEdit(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEdit(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public Editable getText() {
System.out.println("Should be printed once called...");
CharSequence text = super.getText();
if (text == null) {
return null;
}
if (text instanceof Editable) {
return (Editable) super.getText();
}
super.setText(text, BufferType.EDITABLE);
return (Editable) super.getText();
}
}
这是我的主要活动:
public class MainActivity extends AppCompatActivity {
CustomEdit s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
s = findViewById(R.id.newEditText);
}
}
我不希望在运行时阅读多个“应在调用后打印...”,此时我应该希望看不到它的一个实例,因为尚未调用该方法。
解决方案
EditText 扩展自 TextView 类和 TextView 类,并在其构造函数中调用 getText() 方法。每当您创建作为 TextView 的直接/间接子类的自定义小部件的任何实例时都会发生这种情况,我想这就是原因,您的自定义视图的 getText() 被调用,即使它在您的项目代码中没有被调用。
如果要执行一些检查,然后调用原始 getText() 方法以从中获取值,则不要覆盖自定义类中的方法。在您的自定义类中有一个具有这些检查的普通方法,然后根据这些检查调用原始方法(以获取值),然后您可以从普通方法返回值。
推荐阅读
- python - 调用谷歌表格API问题的Python不和谐机器人
- vba - 如何使用 LastModificationTime 识别作为参数传递的项目?
- github - 在 github 上删除过时的检查
- r - 如何计算负二项式混合效应模型中固定效应的效应大小?
- c# - 当键不存在时,StringSetAsync with When.NotExists 返回 false
- forms - Symfony / Sonata:带有输入字段的下拉菜单
- php - 值更改的 XML 到 CSV
- seaborn - seaborn 热图条件边界
- azure - Azure AD SSO 通过 Graph API 同步用户
- python - 基于索引比较的总和索引明智列表