繁体   English   中英

Android我如何概括一个类以供重用

[英]Android How can i generalize a Class for reuse

在我的android代码中,我需要将edittext放入recyclerview并保存使用TextWatcher输入的值。 为此,我使用了此处建议的自定义TextWatcher。

private class MyCustomEditTextListener implements TextWatcher {       
int position;
public void updatePosition(int position)
{ 
     this.position=position;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2,
int i3) {}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i2,
int i3) {}

@Override
public void afterTextChanged(Editable editable) {}}

从onBindViewHolder ..调用updatePosition,我将aftertextChanged中的edittext内容保存到数据模型中。

我现在的情况是我将MyCustomEditTextListener用作内部类。 但是在多个活动中需要相同的用法逻辑。 我如何重写该类,这样我就不必在每个回收站适配器中都重复它。

在afterTextChanged()方法中,我使用如下所示的内容

modelList.get(position).setQuantity(editable.toString());

其中modelList是“模型”对象的ArrayList。 但是我的问题变成了每个适配器中的Model类都不同。

您可以编写一个静态函数并返回TextWatcher

  public static TextWatcher getTextWatcher(){
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {}

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2,
                                  int i3) {}

        @Override
        public void afterTextChanged(Editable editable) {}
    };

}

您可以将其与YourClassName.getTextWatcher()一起使用

您将以某种方式textwatcher在视图持有器类中实现textwatcher 更好的方法是根据您的需要编写一个BaseViewHolder类,该类可以根据您的需要进行abstract ,如果要从子类中获取任何数据,则可以声明一个abstract方法并使该类成为abstract 使BaseViewHolder类成为要为其实现此逻辑的所有ViewHolder类的父类。 如果您要在recyclerview实现此逻辑,这将很有帮助。

如果要在activitiesrecyclerview方法中都实现此逻辑,则应该编写一个BaseActivity类,它将作为Activity的父类。 正如我所说的,该类可以是abstract ,也可以不是abstract ,这取决于您的需要。

将您的代码放入该基类广告中即可对其进行访问。 这样,就可以实现可重用性,并且如果您在单个位置进行更改,那么所有其他类都将受到影响。 通过这种方式,您将不会遇到一种情况,它在活动A中有效,但在活动B中却没有。

希望这会有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM