我觉得每次我问这样的问题,人们总是要求代码,但后来我发布代码,没有人再回复,因为我猜代码太长了。所以这次我会尽量简短。
考虑一个扩展此类的适配器类,它提供了扩展RecyclerViews的功能:
public class MyAdapter extends ExpandableRecyclerViewAdapter<MyParentViewHolder, MyChildViewHolder> ...
但是我通常有另一个独立的适配器类(我尝试自己制作),它提供了向RecyclerView项添加复选框/提供多选的功能。用法示例:
public class MyOtherAdapter extends CheckableAdapter<SomeType, SomeViewHolder> ...
该类恰好足够短以便发布,以防万一它是相关的:
public abstract class CheckableAdapter<T extends CheckableObject, VH extends CheckableViewHolder> extends RecyclerView.Adapter<VH> {
private List<T> list;
private boolean checkMode;
public CheckableAdapter(List<T> list) {
this.list = list;
this.checkMode = false;
}
@Override
public void onBindViewHolder(VH holder, int position) {
final CheckableObject checkableObject = list.get(position);
holder.checkBox.setOnCheckChangedListener( ... );
if (isCheckModeOn()) {
...
} else {
...
}
}
public boolean getCheckMode() { return checkMode; }
public void setCheckMode(boolean checkMode) { this.checkMode = checkMode; }
}
好的,现在考虑一下你需要扩展ExpandableRecyclerViewAdapter和CheckableAdapter的情况,但你不能用Java扩展两个类。换句话说,您希望将两个类的所有功能都带入您的班级。
解决此类案件的正确方法是什么?任何人都可以使用我在这里定义的类提供一个例子吗?
答案 0 :(得分:2)
我认为“正常”的答案是遵循众所周知的“偏爱结构而不是继承”。在以下意义上:不要使用继承来保存几行代码,只需将额外的功能放入专用的类X和Z中,并让那些需要它的类创建一个X或Z的对象,并调用方法在那些。
但问题是:你被“塞进”Android编程模型。我认为在这种情况下没有简单的解决方案。除非你找到一种方法