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

时间:2015-02-12 07:24:33

标签: android android-fragments

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

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

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

  1. 创建了多个Fragment.xml文件
  2. 为每个单独的视图定义了一个类
  3. 创建一个列表以显示可用的碎片
  4. 选中时实例化并显示片段
  5. 所以基本上我的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. 如何在一个片段后将片段重新附加到新的Activity 方向改变?
    6. 感谢您的时间。

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

1 个答案:

答案 0 :(得分:-1)

我认为使用片段是一个很好的选择,并以this example ...

开头

你绝对应该覆盖一些“适配器”来更轻松地处理所有交易......

检查here方向问题...