Android 我如何概括 Class 以供重用

Android How can i generalize a Class for reuse

在我的 android 代码中,我需要在 recyclerview 中放置一个 edittext 并保存使用 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.. 我将 edittext 内容从 afterTextChanged 保存到数据模型。

我现在的情况是我使用 MyCustomEditTextListener 作为内部 class。但是在多个活动中需要相同的使用逻辑。我如何重写 class 以便我不必在每个回收器适配器中复制它。

在 afterTextChanged() 方法中,我使用了如下内容

modelList.get(位置).setQuantity(editable.toString());

其中 modelList 是 'Model' 个对象的 ArrayList。但我的问题是模型 class 在每个适配器中都不同。

您可以编写静态函数和return您的 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()

一起使用

您将以某种方式仅在视图持有者 class 中实现 textwatcher。如果你想从 child class 意味着您可以声明一个 abstract 方法并将 class 设为 abstract。对于您要为其实现此逻辑的所有 ViewHolder class,将 BaseViewHolder class 设为 parent class。如果您要在 recyclerview 中实现此逻辑,这将很有帮助。

如果你想在 activitiesrecyclerview 中实现这个逻辑,那么你应该写一个 BaseActivity class 这将是 parent class 你的 Activity。正如我所说,这个 class 可以或不可以 abstract,这取决于您的需要。

将您的代码放入 Base class 广告访问它。通过这种方式可以实现可重用性,如果你改变一个地方,那将影响所有其他 classes。通过这种方式,您将不会遇到这样的情况,它在活动 A 中有效,但在 activity B 中无效。

希望这对您有所帮助:)