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. Android的碎片 - 我在做什麼錯
- 4. 爲什麼FrameLayout用於碎片?
- 5. 爲什麼elasticsearch碎片未分配
- 6. 爲什麼我的碎片空白?
- 7. 碎片onCreateView方法做什麼?
- 8. elasticsearch中碎片數量的影響是什麼?
- 9. 什麼是莎士比亞的碎片文件?
- 10. 碎片:什麼是衡量視圖的最佳地點?
- 11. 這是什麼錯誤:無法映射爲因碎片
- 12. 什麼是避免SSD碎片的甜蜜點?
- 13. 在ViewPager中使用碎片和視圖的約定是什麼?
- 14. MongoDB ona 64位機器的節點/碎片限制是什麼?
- 15. 什麼是好辦法,水平碎片PostgreSQL中
- 16. 碎片內的碎片或ListActivity內的碎片?
- 17. 要碎片還是不碎片? GAE/java/jdo
- 18. 是否可以在碎片中打開新的碎片?
- 19. 什麼是破碎的相對鏈接?
- 20. 如何意圖從碎片到碎片?
- 21. Facebook的頁面怎麼了爲什麼會出現碎片
- 22. 什麼是墊片?
- 23. 如何刪除當前碎片中除當前碎片和第一碎片之外的所有碎片?
- 24. 清理碎片
- 25. Android碎片
- 26. 內存碎片
- 27. Android的碎片
- 28. AndroidStudio - 在碎片
- 29. 碎片活動
- 30. Linux堆碎片
請參閱:與其他片段進行通信 - http://developer.android.com/training/basics/fragments/communicating.html – reVerse 2014-09-22 14:04:33
唯一的原因是通過活動進行通知? – 2014-09-22 14:40:17