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

Gre*_*reg 9 android android-fragments

我最近开始考虑为我的Android设备开发应用程序.让我感兴趣的是我正在玩一些arduinos有一个好主意,让他们与我的手机通信,就像我在arduino本身测量的任何值的接口.现在我可以采取简单的方法,并使用公共资源来实现这一目标,但没有那么多的学习方式,我希望它以我想要的方式.

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

因此,我要注意这个多片段的想法:

  1. 创建了多个Fragment.xml文件
  2. 为每个单独的视图定义了一个类
  3. 创建一个列表以显示可用的碎片
  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;
}
Run Code Online (Sandbox Code Playgroud)

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

我遇到的最大问题是它不是最容易扩展的.对于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();
}
Run Code Online (Sandbox Code Playgroud)

这种方法也奏效了.我可以让它显示我的所有片段,而不必每次都重新实例化每个片段.我相信这可以做我想做的事情,它可以很好地扩展(比交换机/情况IMO更好).我现在遇到的问题是,当我改变方向时,一切都变得疯狂.到目前为止,我只是测试肖像模式,当我在其他方向选择它时,我无法查看任何片段.我可以在任何一个方向启动它,它可以工作,但是当我在运行期间更改它时,我只能看到我改变方向时打开的一个片段.

现在,正在调用每个片段"onCreateView",只是显示没有显示.我相信我已经缩小到它不会附加到从方向改变创建的新活动.无论如何,我可以重新附加已经创建的片段到新活动.

总之,我的问题是:

  1. 这个型号对我的应用程序来说是一个好方法吗?
  2. 有没有一种像样的方法来处理可以很好扩展的碎片?似乎找不到任何例子.
  3. 每次我打开一个不同的选项卡时,是否使用''新的MyFragment()'以实现这个目的的合理方式?
  4. 我将片段存储在列表中的方式是否合理地处理它们?
  5. 在方向更改后如何将片段重新附加到新活动?

感谢您的时间.

*必须动态输入所有这些代码,因为我出于某种原因无法正确地格式化我的C/P代码.

小智 -1

我相信使用片段并从这个例子开始是一个不错的选择......

您绝对应该重写一些“适配器”以更轻松地处理所有事务......

检查这里的方向问题...