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
中实现此逻辑,这将很有帮助。
如果你想在 activities
和 recyclerview
中实现这个逻辑,那么你应该写一个 BaseActivity
class 这将是 parent class 你的 Activity
。正如我所说,这个 class 可以或不可以 abstract
,这取决于您的需要。
将您的代码放入 Base class 广告访问它。通过这种方式可以实现可重用性,如果你改变一个地方,那将影响所有其他 classes。通过这种方式,您将不会遇到这样的情况,它在活动 A 中有效,但在 activity B 中无效。
希望这对您有所帮助:)
在我的 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
中实现此逻辑,这将很有帮助。
如果你想在 activities
和 recyclerview
中实现这个逻辑,那么你应该写一个 BaseActivity
class 这将是 parent class 你的 Activity
。正如我所说,这个 class 可以或不可以 abstract
,这取决于您的需要。
将您的代码放入 Base class 广告访问它。通过这种方式可以实现可重用性,如果你改变一个地方,那将影响所有其他 classes。通过这种方式,您将不会遇到这样的情况,它在活动 A 中有效,但在 activity B 中无效。
希望这对您有所帮助:)