0

我正在转换 Android 4.x 代码以使用 ActionBarSherlock,以便我们的应用程序可以与 Gingerbread 兼容。

到目前为止一切顺利,但它无法启动片段的新实例。

我的 MainActivity 扩展了SherlockFragmentActivityimplements ActionBar.TabListener

代码在 case 为 0 时失败:

@Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            mFragmentProjects = ProjectsFragment.newInstance(position);
            return mFragmentProjects;                                                      
        case 1:
            mFragmentContacts = FragmentPeople.newInstance(position, 0);
            return mFragmentContacts;               
        }
        return ArrayListFragment.newInstance(position);
    }

如果 case 为 0,它应该初始化片段,但我得到了这个异常: ClassNotFoundException. 我唯一的其他线索是:PathClassLoader它在“名称”中和“名称”中显示“这个”android.app.ActionBar$TabListener

我想这与 TabListener 或未正确包含/加载的库有关?我已经清理了项目

片段 ProjectsFragment 扩展SherlockListFragment

newInstance 非常严格:

static ProjectsFragment newInstance(int num) {
    ProjectsFragment f = new ProjectsFragment();

    // Supply num input as an argument.
    Bundle args = new Bundle();
    args.putInt("num", num);
    f.setArguments(args);

    return f;
}
4

1 回答 1

0

事实证明,虽然 MainActivity 没有引用 ActivityY,但 ActivityY 没有 SherlockFragment 代码这一事实使其失败。用不同的方式描述这一点:

MainActivity 使用 ProjectsFragment 这是一个列表当您单击 ProjectsFragment 中的列表时,它会调用 ListsActivity ListsActivity 引用 ItemsFragment

在 MainActivity 工作之前,我必须将 ItemsFragment 更改为 Sherlock 代码。当您使用分页器、选项卡和片段时,Java 似乎以某种方式“向前看”。

于 2012-10-17T19:25:37.210 回答