2013-05-30 30 views
2

我有一個在其中的動態片段的活動。我需要的是異步執行片段被刪除,但remove(myFragment).commit()後運行一些代碼和什麼時候,這個片段removed.Here我不能知道是我的代碼:如何等待,直到一個片段被刪除

final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.remove(myFragment).commit(); 
//wait until the fragment is removed and then execute rest of my code 

從文檔:

public abstract int commit()

計劃提交此事務。承諾不立即發生 ;它將被安排在主線程上工作,在下一次線程準備就緒時完成 。

回答

3

如果您使用片段的onDetach方法來調用活動並告知它已完成,該怎麼辦?

class MyFrag extends Fragment { 

    private Activity act; 

    @Override 
    public void onAttach(Activity activity) { 
     act = activity; 
    } 

    @Override 
    public void onDetatch() { 
     act.fragGone(); 
    } 
} 

而在該活動:

public fragGone() { 
    //do something, update a boolean, refresh view, etc. 
} 
1

您可以嘗試使用片段的onDetached()回調。這將被稱爲每當它從它的活動中刪除。

1

使用onAttach()來檢查當片段被附接到活動,並使用onDettach()來檢查當片段獨棟到的活性。

使用onDettach(),您還可以檢查更新或沒有意見,數據等這樣:

@Override 
public void onDetach() { 
    super.onDetach(); 
    synchronized (mLock) { 
     mReady = false; 
    } 
} 
+0

什麼'同步(m鎖)'是,在你的代碼?如果可能,請添加更多的代碼。謝謝 –

+0

它與刷新或不是asyncktask有關。例如,如果片段被解開,但後臺任務在此狀態下完成,它會嘗試更新視圖,例如textView.setText(newStringValue)。有了這個條件,如果mReady是假的,避免這種行爲。 –

+0

您不需要同步,因爲在同一線程上調用onDetach和onPostExecute –

相關問題