我正在开发一个活动和多个片段的android应用程序。我的应用包含导航抽屉。它的布局包含listview。点击它的项目,我用ft.replace(R.id.my_placehodler, new MyFragment())
动态地改变片段,并将交易添加到backstack ft.addToBackstack(null)
。当我每次创建新的事务时都会创建新的事务。在我看来,这不是一个好方法。你能否给我提供关于进行片段交易的正确方法的建议?正确的方法来做片段transacrtion
0
A
回答
0
只需调用setFragment(FragmentClassObject,false,"fragment");
方法即可。
public void setFragment(Fragment fragment, boolean backStack, String tag) {
manager = getSupportFragmentManager();
fragmentTransaction = manager.beginTransaction();
if (backStack) {
fragmentTransaction.addToBackStack(tag);
}
fragmentTransaction.replace(R.id.content_frame, fragment, tag);
fragmentTransaction.commit();
}
0
如果你想避免instanciating多个实例同一类片段的,那是你想拥有每类片段的单个实例,您可以通过使用标签识别每个片段。
@Override
public void onNavigationDrawerItemSelected(int position) {
String tag = "";
switch (position) {
case 0:
tag = "fragment_0";
break;
case 1:
tag = "fragment_1";
break;
case 2:
tag = "fragment_2";
break;
}
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if (fragment == null) {
// Only in case there is no already instaciated one,
// a new instance will be instanciated.
switch (position) {
case 0:
fragment = new Fragment_class_0();
break;
case 1:
fragment = new Fragment_class_1();
break;
case 2:
fragment = new Fragment_class_2();
break;
}
}
fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit();
}
+0
正如我从你的答复中得到的,我必须将标记设置为片段以便从片段管理器获取它(如果已经实例化)。我对吗? – user3816018 2014-12-03 14:10:55
+0
不只是设置。首先,为同一类设置一个标签(例如,用于Fragment_Class_1的“fragment_0”,用于Fragment_Class_2的“fragment_1”等等)。其次,找到已存在的实例化片段对象(findFragmentByTag)。如果不存在实例化的对象,则该类的新对象将被立即执行。 – hata 2014-12-03 14:41:11
相关问题
- 1. 正确的方法来做swift投票?
- 2. 正确的方法来关闭分段
- 3. 正确的方法来做一个通用的接口方法?
- 4. 正确的方法来做iOS5中的“有条件的继续”
- 5. 这样做的最正确的方法
- 6. 做单选按钮的正确方法?
- 7. 做Realm迁移的正确方法Android
- 8. 这是做什么的正确方法?
- 9. 正确的方法来做一个MVC UML图
- 10. ReactJS宝贝步骤 - 正确的方法来做嵌套组件
- 11. 正确的方法来做vc10运行时安装
- 12. mySQL - 正确的方法来做到这一点?
- 13. 返回前一个片段的正确方法是什么?
- 14. Android:在片段之间跳跃的正确方法
- 15. Android中片段实现的正确方法
- 16. 图片来自UIImagePicker方向不正确
- 17. 正确的方式做HTTP.PUT
- 18. 做这些扩展方法看起来正确吗?
- 19. 片段正确堆叠
- 20. 用正确的方法来努力来命名这个方法
- 21. 正确的做法,从使
- 22. 正确的方法来评估代码
- 23. 正确的方法来划分CAShapeLayer
- 24. 正确的方法来拉伸元素?
- 25. 正确的方法来清理密码?
- 26. 正确的方法来解除MFMailComposeViewController
- 27. 正确的方法来覆盖Control.ControlCollection
- 28. 正确的方法来暂停System.Timers.Timer?
- 29. 正确的方法来使用sessionFactory
- 30. 什么是正确的方式来创建Eclipse片段的JUnit测试?
你看过FragmentManager来切换片段吗? – epsilondelta 2014-12-03 13:28:29
不,我没有。你的意思是我应该跟踪fragmentmanager中的碎片数量吗? – user3816018 2014-12-03 13:29:23