如何处理单个活动的多个片段

我最近开始看看为我的android设备开发应用程序。 对我来说,这个兴趣是我玩过几个arduino,有个好主意让他们和我的手机进行通信,就像我在Arduino上测量的任何值一样。 现在,我可以简单地使用公共资源来完成这个任务,但是没有那么多学习,而且我希望按照我想要的方式来学习。

现在我想我要问的第一个问题是,多个片段/单个活动是否是我完成这个任务的最佳方式? 基本上,我想连接到arduino 1,拉所有的值,但取决于“选项卡”我select了我想某些值显示某些方法。 我决定使每个标签不同的片段,只是不同的方式显示值。 就像我说的,我刚刚开始android开发经验,所以没有太多的基础这个select。

所以被固定在这个多重片段的想法我有:

  1. 创build了多个Fragment.xml文件
  2. 为每个单独的视图定义一个类
  3. 创build一个列表来显示可用的片段
  4. 实例化并在选中时显示片段

所以基本上我的onMenuItemSelect看起来像这样。

FragmentTransaction FT = getFragmentManager.beginTransaction(); switch(position){ case 1: FT.replace(R.id.fragment_container, new MyFragment()).commit(); break; case 2: FT.replace(R.id.fragment_container, new MySecondFragment()).commit(); break; } 

上面的代码工作,它做了我想要的没有任何问题。 我不太喜欢这个,因为对于我想添加的每一个片段,我都需要给交换机增加一个新的例子。 而且这个实例化每一个新的片段,即使已经创build了一个。 那是问题吗?

我遇到的最大的问题是,它不是最容易的规模。 对于2-3片段,这不是处理它的最坏的方式(在我眼里)。 我希望能够拥有尽可能多的碎片,而不需要交换机中的每个碎片。 所以我所做的就是创build一个fragmentList来保存每个片段的单个实例。

 List<Fragment> fragmentList; private void populateFragmentList();{ fragmentList = new ArrayList<Fragment>(); fragmentList.add(new HomeFrag()); fragmentList.add(new BluetoothFragment()); fragmentList.add(new USBFragment()); fragmentList.add(new RCInfoFragment()); fragmentList.add(new ControllerFragment()); fragmentList.add(new FingerCordsFrag()); } public void onMenuItemSelect(int position, int curPosition){ if(fragmentList.get(position).isAdded()){ getFragmentManager().beginTransaction().show(fragmentList.get(postition)) .hide(fragmentList.get(curPosition)).commit(); } else getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentList.get(position)).show(fragmentList.get(position)).hide(fragmentList.get(curPosition)).commit(); } 

而且这种方法也起作用。 我可以让它显示我的所有片段,而不必每次都重新实例化每个片段。 我相信这是做我想要它做的,它相当好地扩展(比开关/情况IMO更好)。 我现在面临的问题是,当我改变方向时,这一切都变得疯狂。 到目前为止,我只是testing肖像模式,我不能查看我的任何片段,当我在其他方向select他们。 我可以从任何一个方向启动它,并且它可以工作,但是当我在运行时更改它时,只能看到当我改变方向时打开的那个片段。

现在,每个片段“onCreateView”被调用,只是显示不显示。 我相信我已经把它缩小到没有重视从定位变化创build的新活动。 有无论如何,我可以重新附加已经创build一个新的活动片段。

总之,我有的问题是:

  1. 这个模型甚至是我的应用程序的好方法吗?
  2. 是否有一个体面的方式来处理好扩展的碎片? 似乎无法find任何例子。
  3. 每次我用合理的方式打开不同的选项卡来使用“新MyFragment()”?
  4. 我的方式是将我的碎片存储在一个列表中,以合理的方式处理它们?
  5. 如何在更改方向后将片段重新附加到新的活动?

感谢您的时间。

*必须即时input所有这些代码,因为我出于某种原因无法使我的C / P'd代码格式正确。

Solutions Collecting From Web of "如何处理单个活动的多个片段"