我的应用程序中有两个片段(每个片段都在滑动标签活动中)。这两个片段有一些现在相同的方法,我认为我可以抽象出那些遵循DRY(不要重复自己)原则的方法。有没有推荐的方法呢?
使用静态方法的util类是一个好方法吗?或者我应该创建一个抽象类“MyAbstractFragment”,它具有这些方法并让片段扩展这个类?
例如。
public class MyCustomFragment extends Fragment {
protected LinearLayout linearLayout;
protected MyAdapter adapter;
//more common fields
void addButtonToFragmentView(final String btnText) {
final Button btn = new Button(getContext());
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
linearLayout.removeView(btn);
}
});
btn.setText(btnText);
linearLayout.addView(btn);
}
void upDateAdapterList(List<String> list){
//....
adapter.updateList(list);
}
}
比我的片段可以扩展此类并设置属性并使用方法。但我也看到我也可以为方法创建一个静态的util类,比如addButtonToFragmentView(final String btnText, Context context, final LinearLayout linearLayout)
和upDateAdapterList(List<String> list, MyAdapter adapter)
或者有一种首选方式吗?
答案 0 :(得分:3)
是的,你可以使用如下的抽象类:
public abstract class BaseFragment extends Fragment {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public Context getContext() {
return this.getActivity().getApplicationContext();
}
protected abstract void addButtonToFragmentView(final String btnText);
protected abstract void upDateAdapterList(List<String> list){
}
然后用这个基类扩展你的新片段。
答案 1 :(得分:1)
我们应该尝试遵循继承的组合。也许你可以有一个专门的UIFactory类来处理动态创建视图,然后你将addButtonToFragmentView方法移动到UI工厂,并使其更通用。
void addButtonToView(final String btnText, final Context, final View parentView);
就upDateAdapterList而言,您可以创建一个BaseListFragment并将其移动到那里,因此无论谁对使用带有List的片段感兴趣都可以扩展此片段。因此,这遵循单一责任原则。