2016-06-18 39 views
2

我在我的應用程序中有兩個片段(每個滑動選項卡活動中的一個選項卡)。這兩個片段有一些現在相同的方法,我認爲我可以抽象出那些方法來遵循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); 
    } 
} 

比我的片段可以擴展這個類,並設置屬性和使用方法。但是我也看到,我也可以爲方法創建一個靜態使用類,如addButtonToFragmentView(final String btnText, Context context, final LinearLayout linearLayout)upDateAdapterList(List<String> list, MyAdapter adapter)

或者是否有這樣做的首選方法?

回答

1

我們應該嘗試遵循繼承的構成。也許你可以有一個專門的UIFactory類來處理視圖的動態創建,然後你將你的addButtonToFragmentView方法移動到UI工廠,並使其更通用。

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

至於upDateAdapterList而言,你可以創建一個BaseListFragment並移動它那裏,所以凡有興趣使用的片段與清單可以延長該片段。因此,這遵循單一責任原則。

+0

幾乎像我這樣做只是移動的方法addButtonToFragmentView到UIFactory類?比我不得不爲onClickListerner上的按鈕創建委託?這似乎是一種更加標準的方法,因爲添加按鈕方法很容易重用。我會將這個答案標記爲公認的,但我仍然願意提供更多的意見。 – user3711421

+0

如果是這樣,那麼你的addButtonToView將接受OnClickListener以及一個參數。我說要將它移到UI工廠,因爲如果將來說任何活動和片段都可能有動態添加視圖的需求。所以他們只會使用這個UIFactory類。 –

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

+0

但由於方法是抽象的我不能提供一個正文,並且必須爲每個片段實現相同的代碼。我試圖做的只是將代碼寫在一個地方,讓這兩個片段使用該代碼。 – user3711421