android - 如何处理单个 Activity 的多个 Fragment

标签 android android-fragments

我最近开始考虑为我的 Android 设备开发应用程序。让我产生这种兴趣的是我正在和一些 arduino 一起玩,有一个好主意让他们与我的手机通信,就像我在 arduino 本身上测量的任何值的接口(interface)一样。现在我可以采取简单的方法并使用公共(public)资源来完成此操作,但是那样学习的东西并不多,我希望以我想要的方式使用它。

现在我想我需要问的第一个问题是,多个 fragment/单个 Activity 是否是我实现此目标的最佳方式?基本上,我想要 1 个连接到 arduino,提取所有值,但是根据我选择的“选项卡”,我希望某些值以特定方式显示。我决定让每个选项卡成为不同的 fragment ,并以不同的方式显示值。就像我说的,我刚刚开始 android 开发经验,所以没有太多的选择依据。

所以我一直专注于这个多 fragment 的想法:

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

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

上面的代码有效,它完成了我想要的,没有任何问题。不过我不太喜欢这样,因为对于我想添加的每个 fragment ,我都需要向开关添加一个新的案例。此外,这每次都会实例化一个新 fragment ,即使已经创建了一个 fragment 。那是问题吗?

我遇到的最大问题是它不是最容易扩展的。对于 2-3 个 fragment ,这不是最糟糕的处理方式(在我看来)。我希望能够拥有尽可能多的 fragment ,而无需为开关中的每个 fragment 单独设置一个案例。所以我所做的是创建一个 fragmentList 来保存我的每个 fragment 的单个实例。

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();
}

而且这个方法也奏效了。我可以让它显示我所有的 fragment ,而不必每次都重新实例化每个 fragment 。我相信这会做我想要做的事情,它的扩展性相当好(比 switch/case IMO 更好)。我现在遇到的问题是,当我改变方向时,一切都会变得疯狂。到目前为止,我只是在测试纵向模式,当我以其他方向选择它们时,我无法查看我的任何 fragment 。我可以在任一方向启动它,并且它有效,但是当我在运行时更改它时,我只能看到我在更改方向时打开的一个 fragment 。

现在,正在调用每个 fragment “onCreateView”,只是没有显示显示。我相信我已经将它缩小到它没有附加到从方向更改创建的新 Activity 。无论如何,我可以将已经创建的 fragment 重新附加到新 Activity 中吗?

总的来说,我的问题是:

  1. 这个模型是否适合我的申请?
  2. 是否有合适的方法来处理可扩展的 fragment ?不能 似乎找不到任何例子。
  3. 每次我打开不同的标签时都使用“new MyFragment()” 实现这一目标的合理方法?
  4. 我将 fragment 存储在列表中的方式是否合理 处理它们?
  5. 如何在 方向改变?

感谢您的宝贵时间。

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

最佳答案

我认为使用 fragment 并以this example开头是个不错的选择...

你绝对应该覆盖一些“适配器”来更容易地处理所有事务......

检查 here对于方向问题...

关于android - 如何处理单个 Activity 的多个 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471603/

相关文章:

android - 在 LayerDrawable 中设置 Layer 的可见性

java - 如何使用 CustomArrayAdapter 区分 ListFragment 中的 View ?

java - 需要 Android/PC GIS 库

android - 在 Android 上重用部分可绘制对象

android - 添加到后台堆栈时如何维护 fragment 状态?

Android Google maps v2 错误同时膨胀 fragment

android - 在 iOS 中定义 UITableView Cell 模板的简单方法类似于在 Android 中使用 MvxListView 完成的方式

android - kotlin-无法替换 RecyclerView 适配器中的 Fragment

android - 从另一个 Activity 刷新 Recyclerview

android - 在 fragment 中找不到警报对话框的 View