2015-02-12 65 views
9

我最近开始关注为我的android设备开发应用程序。对我而言,最初的兴趣在于我玩过几个arduinos,他们有一个好主意让他们与我的手机进行通信,就像我在Arduino本身测量的任何值的界面一样。现在,我可以采取简单的方法,并使用公共资源来实现这一目标,但没有那么多的学习方式,我希望按照我想要的方式进行。如何为单个活动处理多个片段

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

所以正在紧盯这个多片段的想法,我有:

  1. 创建多个文件fragment.xml之
  2. 定义创建的列表中显示可用的片段每个单独视图
  3. 实例化和显示的片段,当选择

所以基本上我的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; 
} 

上面的代码工作,它做了我想要它没有任何问题。我不太喜欢这个,因为对于我想添加的每一个片段,我都需要向交换机添加一个新的案例。此外,每次都会创建一个新的片段,即使已经创建了一个片段。那是问题吗?

我遇到的最大问题是它不是最容易扩展的。对于2-3个碎片,这不是处理它的最坏方式(在我眼中)。我希望能够拥有尽可能多的碎片,而不需要交换机中的每个碎片。所以我所做的就是创建一个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更好)。我现在面临的问题是,当我改变方向时,这一切都变得疯狂。到目前为止,我只是测试肖像模式,当我以其他方向选择它们时,我无法查看任何片段。我可以从任何一个方向启动它,并且它可以工作,但是当我在运行时更改它时,只能看到我改变方向时打开的一个片段。

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

总之,我的问题是:

  1. 是这种模式甚至对我的应用程序的好方法?
  2. 有没有一种体面的方式来处理可以很好扩展的碎片? 似乎找不到任何示例。
  3. 每当我打开一个不同的标签页时,是否使用'新的MyFragment()' 合理的方式来实现此目的?
  4. 我的方式是将我的片段存储在一个列表中,以合理的方式处理它们? ?
  5. 如何在 方位更改后将片段重新附加到新的活动?

谢谢你的时间。 *由于某种原因,我不能让我的C/P'd代码正确格式化,因此不得不即时输入所有这些代码。

回答

-1

我相信一个好的选择使用的片段,并与this example开始...

你一定要覆盖某些“适配器”,以更容易地处理所有的事务......

检查here为定位问题...

相关问题