0

我仍然没有 100% 理解上下文、活动、片段等的概念/差异,所以请耐心等待。

在 SherlockFragment 中调用 getActivity() 时出现 ClassCastException(注意:我也尝试过 getSherlockActivity() 无济于事):

public abstract class TaskGrabbingFragment extends SherlockFragment {
...
    protected void transferGroupToMe() {
    ...
        Backend.getInstance().modifyTask(new OnModifyTaskResponse() {
            @Override
            public void onModifyTask(Map<String, Object> response) {
                refresh();
            }
        }, (MyActivity) getActivity(),  //ClassCastException
        TaskHelper.TASK_IDS, ids,
        TaskHelper.EMPLOYEE_ID, DomaCareBackend.getInstance().getUserId());
    }
}

我的 logcat 输出:

FATAL EXCEPTION: main
java.lang.ClassCastException: com.mycom.task.AllTasksActivity cannot be cast to com.mycom.myapp.MyActivity
at com.mycom.myapp.task.TaskGrabbingFragment.transferGroupToMe(TaskGrabbingFragment.java:69)
at com.mycom.myapp.task.TaskGrabbingFragment.onContextItemSelected(TaskGrabbingFragment.java:47)
at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:1583)
at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:1992)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:370)
at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:211)

MyActivity扩展了SherlockFragmentActivity,异常发生在TaskGrabbingFragment,但是getActivity()返回AllTask​​sTabFragment,是一个SherlockFragment。那么是否有一些规则反对将 SherlockFragment 转换为 SherlockFragmentActivity?有什么样的解决方案可以将片段转换为片段活动?

4

2 回答 2

1

getActivity() 返回 AllTask​​sActivity,而不是 AllTask​​sTabFragment。getActivity() 返回当前片段关联的 Activity。您应该检查 TaskGrabbingFragment 是否与 AllTask​​sActivity 或 MyActivity 相关联。

于 2013-03-25T10:34:27.863 回答
1

这是我心中的一些基本理论,如果你能纠正它的一些缺点,我将不胜感激:

Context是一种本质,用于了解某些逻辑在哪里执行。最常见的Contexts 是Application,这意味着.ActivityServiceContext

Application类允许您在任何引用它的程序组件中为您的应用程序提供资源,因为它代表全局(应用程序)上下文。

Service是一个程序组件,允许您在后台执行一些逻辑。

Activity是用户在某一时刻与之交互的主要 UI 单元。它主要用于提供 GUI 组件,例如Views.

如今,运行 Android 的设备种类繁多。这就是为什么在开发应在大多数设备上尽可能执行的应用程序时出现碎片问题的原因。

作为该问题的解决方案之一,AndroidFragment在其框架中提供了类,该类充当 UI 的可重用容器,并且Activity通过生命周期与类强绑定Activity。一个人Activity可能持有很多Fragments 并且有一个与之关联的后栈。

最近,Android 开发人员提供了一个创建嵌套片段的机会——片段,因此一个片段Fragment可以作为其他片段的容器。但与 , s 相比ActivityFragments 没有嵌套片段的回栈。

您的问题似乎不是您认为FragmentContext那样。Fragment只是一个普通的对象 - 容器 - 它可以提供给Activity它所附加的用户。

奇怪的是getActivity()方法返回 aFragment因为它是一个最终方法,它应该返回一个Activity对象。

问题可能隐藏在您添加FragmentActivity.

于 2013-03-25T10:56:49.373 回答