2016-01-16 59 views
2

有人可以告訴我,如果我正確解決這個問題,或者如果我應該去另一條路線?多個片段的一個接口

這是一個簡化的例子:我有1個活動和2個片段。每個片段都有一個按鈕,單擊該按鈕時,將點擊返回到活動,並在活動內彈出一個Toast。

我知道片段通過接口與活動進行通信。但是如果我有多個具有類似接口的碎片。例如,這裏兩個片段使用一個onClick類型的接口回傳送到活動

static interface OnClickedListener{ 
    public void buttonClicked(View v); 
} 

是更好地

A)創建一個單獨的接口類和兩個片段內將其固定。例如片段1:

public class Fragment1 extends Fragment implements OnClickedListener{ 


private OnClickedListener clickedInterface; 

public Fragment1() { 
    // Required empty public constructor 
} 

@Override 
public void buttonClicked(View v) { 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.clickedInterface = (OnClickedListener)activity; 
}} 

片段2:

public class Fragment2 extends Fragment implements OnClickedListener{ 

private OnClickedListener clickedInterface; 

public Fragment2() { 
    // Required empty public constructor 
} 

@Override 
public void buttonClicked(View v) { 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.clickedInterface = (OnClickedListener)activity; 
} 

OR

B)創建獨特的特定片段個人接口和象提到執行這些在MainActivity代替一個接口以上。謝謝。

回答

5

首先創建您在自定義界面中的自定義片段。現在

public class CustomFragment extends Fragment implements OnClickedListener{ 
     public OnClickedListener clickedInterface; 

     @Override 
     public void buttonClicked(View v) { 
     } 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 
      this.clickedInterface = (OnClickedListener)activity; 
     } 
} 

,可以在每一個片段添加

(I)的片段1

public class Fragment1 extends CustomFragment { 
    ...... 
} 

(ⅱ)片段2

public class Fragment2 extends CustomFragment { 
    ...... 
} 
0

我不會讓Fragment中包含的任何View的細節泄漏到Activity中。

更好的界面將基於與按鈕按壓相關的語義操作,例如createThing()deleteThing()

Activity不應該在乎哪個View被點擊以啓動動作需要發生的動作。如果將按鈕移至菜單或與View不相關的其他位置,則發生接口時。

如果您創建類似這樣的接口,爲不同的Fragment創建副本的問題會消失。