在android中使用带有片段的roboguice的任何简单示例?
Posted
技术标签:
【中文标题】在android中使用带有片段的roboguice的任何简单示例?【英文标题】:Any simple examples using roboguice with fragments in android? 【发布时间】:2012-01-07 13:07:54 【问题描述】:我在寻找使用片段 + RoboGuice 的工作示例时遇到问题。当您尝试使用 android 片段事务管理器添加/删除片段时,就会出现问题。一旦您告诉片段从 RoboFragment 继承,事务管理器就不再认为该类是片段(因为它扩展了 RoboFragment)。但是,您可以使用 RoboGuice 自己的片段管理器,但它也会崩溃。有没有动态添加/删除 RoboGuice 片段的示例?
【问题讨论】:
我的 RoboGuice 和 Fragments 在应用程序中运行良好。您能否提供堆栈跟踪,以便我们查看问题所在? 另外,你使用的是什么版本的兼容库? 我也在寻找一些例子,在尝试连接 InjectFragment 的东西时,我似乎得到了很多 NPE。我很想看到一些有效的例子。 【参考方案1】:我最近开始在一个新项目上使用fragments,下面是我正在使用的代码
我没有从 RoboFragment 类继承,但我通过在我的 onCreate 和 onViewCreated 方法中添加以下几行来做完全相同的事情。从 RoboFragment 继承应该没有什么不同,实际上这就是 RoboFragment 的样子。
public void onCreate(final Bundle savedInstanceState)
super.onCreate(savedInstanceState);
RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this);
public void onViewCreated(final View view, final Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
RoboGuice.getInjector(getActivity()).injectViewMembers(this);
// Do whatever with your injected views.
显然我也实现了 onCreateView。
然后,在我的 Activity 中,我扩展了 FragmentActivity,因为我正在使用 compatibility package。请注意,如果您想要与前 API 级别 11 兼容,则必须使用 FragmentActivity。如果您只支持 11 plus,则不需要兼容性库或使用 FragmentActivity。在我的活动中,我使用以下内容将片段添加到我的页面。
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentHolder, new MyFragment());
transaction.commit();
R.id.fragmentHolder 的类型是 FrameLayout。
一切正常,我可以在我的片段中使用我注入的所有资源和视图。为了完整起见,我使用最新的 2.0-SNAPSHOT 的 roboguice 以及针对 Android 2.2.1 的兼容 v4 库版本 r6。
【讨论】:
感谢国王。您是否有任何代码您已经找到或可以提供片段实际上做有意义的事情? 恐怕我不知道,但是您应该能够使用片段中的 Activity 执行任何您可以执行的操作。唯一不同的部分是将数据从一个 Fragment 传递到另一个 Fragment,因为它们不应该直接通信。我看到这种方法的方式是检查 onCreate() 中 getActivity() 的类型,并确保它是您创建的某个接口以接受来自片段的数据。这样,您的 Activity 可以实现此接口并在需要时将数据传递给下一个片段。 你确定这行得通吗?当我尝试使用 Roboguice 2.0 时,我得到IllegalArgumentException: MyFragmentActivity does not appear to be a RoboGuice context (instanceof RoboContext)
你的 Activity 是 RoboFragmentActivity 吗?【参考方案2】:
Roboguice 1.x 与兼容库和片段不兼容。您要么必须移动处于测试阶段的 2.0,要么自己扩展 Fragment* 类。
更多信息请访问:
http://groups.google.com/group/roboguice/browse_thread/thread/2858bc10b83b6beb
【讨论】:
以上是关于在android中使用带有片段的roboguice的任何简单示例?的主要内容,如果未能解决你的问题,请参考以下文章
Android RoboGuice开源框架Butter Knife开源框架浅析