让Fragments使用相同的方法

时间:2016-06-18 05:48:10

标签: android android-fragments

我的应用程序中有两个片段(每个片段都在滑动标签活动中)。这两个片段有一些现在相同的方法,我认为我可以抽象出那些遵循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)

或者有一种首选方式吗?

2 个答案:

答案 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){
}

然后用这个基类扩展你的新片段。

代码取自: https://github.com/spirosoik/AndroidArchitecturePadawans/blob/master/presentation/src/main/java/com/architecture/padawans/views/common/BaseFragment.java

答案 1 :(得分:1)

我们应该尝试遵循继承的组合。也许你可以有一个专门的UIFactory类来处理动态创建视图,然后你将addButtonToFragmentView方法移动到UI工厂,并使其更通用。

void addButtonToView(final String btnText, final Context, final View parentView);

就upDateAdapterList而言,您可以创建一个BaseListFragment并将其移动到那里,因此无论谁对使用带有List的片段感兴趣都可以扩展此片段。因此,这遵循单一责任原则。