- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近开始考虑为我的 Android 设备开发应用程序。让我产生这种兴趣的是我正在和一些 arduino 一起玩,有一个好主意让他们与我的手机通信,就像我在 arduino 本身上测量的任何值的接口(interface)一样。现在我可以采取简单的方法并使用公共(public)资源来完成此操作,但是那样学习的东西并不多,我希望以我想要的方式使用它。
现在我想我需要问的第一个问题是,多个 fragment/单个 Activity 是否是我实现此目标的最佳方式?基本上,我想要 1 个连接到 arduino,提取所有值,但是根据我选择的“选项卡”,我希望某些值以特定方式显示。我决定让每个选项卡成为不同的 fragment ,并以不同的方式显示值。就像我说的,我刚刚开始 android 开发经验,所以没有太多的选择依据。
所以我一直专注于这个多 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 中吗?
总的来说,我的问题是:
感谢您的宝贵时间。
* 必须即时键入所有这些代码,因为出于某种原因,我无法正确格式化我的 C/P 代码。
最佳答案
关于android - 如何处理单个 Activity 的多个 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471603/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!