【问题标题】:Android How can i generalize a Class for reuseAndroid 我如何概括一个类以供重用
【发布时间】:2017-09-04 07:36:07
【问题描述】:

在我的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) {}}

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

我现在的情况是我使用 MyCustomEditTextListener 作为内部类。但是在多个活动中需要相同的使用逻辑。我怎样才能重写这个类,这样我就不必在每个回收器适配器中复制它。

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

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

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

【问题讨论】:

标签: java android android-recyclerview code-reuse textwatcher


【解决方案1】:

您将通过某种方式仅在视图持有者类中实现textwatcher。所以更好的是你可以写一个BaseViewHolder类,它可以是abstract,这取决于你的需要,如果你想从子类中获取任何数据意味着你可以声明一个abstract方法并创建类作为abstract。将BaseViewHolder 类作为您要为其实现此逻辑的所有ViewHolder 类的父类。如果您要在recyclerview 中实现此逻辑,这将很有帮助。

如果你想在activitiesrecyclerview 两种方式中实现这个逻辑,那么你应该编写一个BaseActivity 类,它将成为你的Activity 的父类。正如我所说,这个类可以或不能是abstract,这取决于你的需要。

将您的代码放入该基类广告中即可访问它。通过这种方式可以实现可重用性,如果您在单个位置进行更改,则会影响所有其他类。通过这种方式,您不会遇到场景,它在活动 A 中工作,但在活动 B 中没有。

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    您可以编写一个静态函数并返回您的 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() 一起使用

    【讨论】:

    • 那不是我想要的。我已经更新了我的问题,澄清了我的问题。
    猜你喜欢
    • 2014-05-02
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多