2015-04-20 47 views
0

我有以下情況:
設置一個焦點片段

的活動,有片段a。

在用戶輸入,一個新的分段(讓稱之爲片段-B)加入,通過使用以下代碼:

ft.add(R.id.content_frame, fragmentB); 

現在,當我壓回,如所預期的片段-B被破壞。

正如加入片段-B(而不是替代)沒有回調片段A.

onResume()我需要儘快片段-B被破壞設定片段-A的焦點。

我用下面的代碼來設置聚焦:

getView().setFocusableInTouchMode(true); 
getView().requestFocus(); 

有什麼辦法來實現這一目標?

回答

2

對於那些誰正在努力獲得片段(when fragments are added and NOT Replaced)「回調」,可以試試下面的方法開發:

使用addOnBackStackChangedListener還增加了一個新的偵聽更改片段回棧。

我在片段-A的onCreate()方法如下添加這個addOnBackStackChangedListener,:

getFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() { 

      @Override 
      public void onBackStackChanged() { 
       if (getView()!=null){ 
        getView().setFocusableInTouchMode(true); 
        getView().requestFocus();  
       }    
      } 
     }); 

現在只要片段b被破壞,onBackStackChanged被調用,我能夠進行對焦。

當然,當碎片被銷燬時,您可以在onBackStackChanged內寫入任何想要執行的代碼。

0

創建一個接口:

public interface DestructionListener { 
    void onDestroyed(); 
} 
在FragmentB類

現在把主題的實現:

private DestructionListener listener; 

public void setDestructionListener(DestructionListener listener) { 
    this.listener = listener; 
} 

仍然在同一個片段,應用這樣的變化:

@Override 
public void onDestroy() { 
    ... 
    if(listener != null) 
     listener.onDestroyed(); 
    super.onDestroy(); 
} 

現在你已經實現了Listener模式 - 你可以監聽當FragmentB是dest時發生的事件royed。在你的活動中,只需要:

fragmentB.setDestructionListener(new DestructionListener() { 
    void onDestroyed() { 
     // Request focus here 
    } 
}); 

你很好去。

0

你可以簡單地隱藏片段(你不想要焦點),並顯示你想要的焦點,因爲你正在添加片段而不是替換。