Q
什麼是碎片
0
A
回答
0
保持在活動的公共變量(如果小數據),或者,寫入活動的接口並執行,在所有片段。使用接口通過寫入方法傳遞數據。
+0
但是,根據你的解決方案,這意味着我需要保存一個活動參考,它可能是一個潛在的內存泄漏錯誤 – 2014-09-22 14:08:49
0
你在這裏。這是做分段< - >活動交流的正確和完整的方式。片段< - >片段通信應該通過控制它們的活動。我添加了相關的接口,與onBackPress爲例:
public class BaseFragment extends Fragment implements BaseActivityDelegate {
private BaseActivityInterface mActivity;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mActivity != null) {
mActivity.registerBaseActivityDelegate(this);
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (mActivity != null) {
mActivity.unregisterBaseActivityDelegate(this);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mActivity = (BaseActivityInterface)activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() +" must implement BaseActivityInterface");
}
}
@Override
public void onDetach() {
super.onDetach();
mActivity = null;
}
/**
* Override by sub-class in order to intercept the back press.
*
* @return true if the back press is consume by the fragment
*/
@Override
public boolean onBackPressed() {
return false;
}
}
public class BaseActivity extends FragmentActivity implements BaseActivityInterface {
protected ArrayList<BaseActivityDelegate> mBaseActivityDelegates;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mBaseActivityDelegates = new ArrayList<BaseActivityDelegate>();
}
@Override
public void registerBaseActivityDelegate(BaseActivityDelegate delegate) {
if (mBaseActivityDelegates != null) {
mBaseActivityDelegates.add(delegate);
}
}
@Override
public void unregisterBaseActivityDelegate(BaseActivityDelegate delegate) {
if (mBaseActivityDelegates != null) {
mBaseActivityDelegates.remove(delegate);
}
}
@Override
public void onBackPressed() {
if (mBaseActivityDelegates != null) {
for (BaseActivityDelegate delegate : mBaseActivityDelegates) {
if (delegate != null && delegate.onBackPressed()) {
// the delegate intercepted the back press event
return;
}
}
}
// back press was not intercepted, continue handling it
super.onBackPressed();
}
}
public interface BaseActivityDelegate {
public boolean onBackPressed();
}
public interface BaseActivityInterface {
public void registerBaseActivityDelegate(BaseActivityDelegate delegate);
public void unregisterBaseActivityDelegate(BaseActivityDelegate delegate);
}
1
最簡單的&最好的辦法將是利用一些事件總線庫。它將保持您的代碼清理片段之間的鬆散耦合通信活動。
奧托非常容易設置&的使用。它來自sqaure。查看@http://square.github.io/otto/
http://corner.squareup.com/2012/07/otto.html也會讓你看到它解決了什麼問題。
相關問題
- 1. 碎片內存是什麼樣的?
- 2. 爲什麼使用碎片?
- 3. 爲什麼我的碎片空白?
- 4. 什麼是避免SSD碎片的甜蜜點?
- 5. MongoDB ona 64位機器的節點/碎片限制是什麼?
- 6. 這是什麼錯誤:無法映射爲因碎片
- 7. 什麼是好辦法,水平碎片PostgreSQL中
- 8. 在ViewPager中使用碎片和視圖的約定是什麼?
- 9. 是否可以在碎片中打開新的碎片?
- 10. 要碎片還是不碎片? GAE/java/jdo
- 11. Facebook的頁面怎麼了爲什麼會出現碎片
- 12. 什麼是墊片?
- 13. 如何刪除當前碎片中除當前碎片和第一碎片之外的所有碎片?
- 14. 碎片活動
- 15. Android的碎片
- 16. 碎片畫廊
- 17. Android碎片
- 18. Android碎片
- 19. 內存碎片
- 20. 在碎片上調用register/unregister eventbus的最佳方法是什麼?
- 21. 在單個活動中管理多個碎片的理想方式是什麼?
- 22. 是什麼原因導致低Page佔用程度與低碎片
- 23. 用於「壓縮」或「碎片整理」陣列的內置PHP函數是什麼?
- 24. 爲什麼我的Azure SQL數據庫索引仍然是碎片?
- 25. Android中使用FragmentManager進行碎片回收的目的是什麼?
- 26. 爲什麼我會在Android Studio(碎片)中獲取NullPointerException?
- 27. 爲什麼我不能在Android中膨脹我的碎片?
- 28. 爲什麼不「不碎片」標誌被禁用?
- 29. WinDbg由外部碎片意味着什麼?
- 30. MongoDB將碎片添加到現有集羣 - 會發生什麼?
請參閱:與其他片段進行通信 - http://developer.android.com/training/basics/fragments/communicating.html – reVerse 2014-09-22 14:04:33
唯一的原因是通過活動進行通知? – 2014-09-22 14:40:17