片段

2016-01-15 22 views
0

的適當更換我稱A.活性具有1幀佈局,其中使用片段一種活性。我有兩個片段,Fragment1和Fragment2。活動啓動時,片段1填充框架佈局。片段

片段1還包含一個按鈕,點擊時有Fragment2替代它的是相同的框架佈局中。我的問題是,當我點擊Fragment1中的按鈕時,我應該實現該代碼,以便

A)活動A通過使用某種類型的布爾值通過接口通知片段中的onClick,然後繼續替換它與Fragment2。

OR

b)實施中的片段1本身Fragment2替代片段1例如代碼:

private FragmentTransaction ft; 
private Button registerButton, resetButton; 
private Fragment fragment; 

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


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_login, container, false); 

    registerButton = (Button)view.findViewById(R.id.register_button); 
    resetButton = (Button) view.findViewById(R.id.reset_button); 
    registerButton.setOnClickListener(this); 
    resetButton.setOnClickListener(this); 

    return view; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.register_button: { 
      fragment = new RegisterFragment(); 
      ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.content_frame, fragment); 
      ft.addToBackStack(null); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      ft.commit(); 
      break; 
     } 
    } 
} 

有人能解釋爲什麼一個比其他?非常感謝!

+0

'我有一個活動叫A.該活動具有1個使用碎片的框架佈局。我有兩個片段,Fragment1和Fragment2。活動啓動時,片段1填充框架佈局。 Fragment1還包含一個按鈕,單擊該按鈕時將其替換爲同一幀佈局中的Fragment2。我的問題是,當我點擊Fragment1中的按鈕時,我應該執行該代碼,以便''你能否把這個代碼添加到你的問題 – petey

+0

我會選擇A,因爲片段本身不應該知道它的狀態,即控制活動的片段管理器 –

+0

好的,謝謝,我添加了選項B的代碼示例 –

回答

2

一般情況下,我做的是使用某種生活在片段被替換(在這種情況下片段1)的接口。然後,您的父級活動將實現此接口,從而在作爲該特定片段的父級的活動之間建立契約。

當您按下按鈕(或任何事件發生信號代替),你抓你的活性,鑄造到該接口,並調用特定的方法。

例如該片段

((MyFragmentListener) getActivity()).onActionHappens(); 

凡MyFragmentListener是內部類的片段和onActionHappens的()內的信令事件是發送信號的方法。這有效地在您的片段與承載該片段的任何活動之間創建了一個合約。當你的行爲發生時,你讓活動知道,然後活動覆蓋適當的方法來處理事件。

還有其他的方法可以做到這一點,但在簡單的層面,這是它是如何做。

爲什麼不選擇B

選項B創建片段,你不一定要之間的緊密耦合。在實踐中,您希望耦合位於片段之間,它是主機(或父級),它是Activity。此外,可能有很多使用該片段的活動,因此您只需調用getActivity()就可以抽象出使用它的特定活動的詳細信息。在這種情況下,連接片段和Activity是可以接受的,因爲兩者無論如何都是耦合的。我們知道這一點,因爲片段不能沒有關聯的活動,所以利用這種緊密耦合是可以的。

摘要

pick選項A.它是最乾淨的路線,並且避免了您在選擇B.做假設的實現細節

這也是你有沒有任何外部基本解決圖書館或細節要求。如果你想要一個更先進的解決方案,結賬奧托(由廣場製造)Link to the library here

+0

感謝您的深思熟慮的迴應,這很有道理 –

+0

沒問題。很高興我能幫上忙! –