10

我正试图让代码在这里工作。它编译得很好。它会运行。它将加载选项卡 1(共 3 个)。但是,当我单击第二个或第三个选项卡时,我得到了这个:

java.lang.NoSuchMethodError: android.app.FragmentTransaction.detach

这发生在代码中

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    if (mFragment != null) {
        //ft.detach(mFragment); //requires API Level 13
        ft.remove(mFragment); //this does not do the same thing as detach
    }
}

我发现detach仅适用于 API 级别 13。我尝试了remove,但显然它没有做同样的事情。有没有人对如何根据第一个链接中的代码克服这个问题有任何想法?


编辑:我想attach也是如此,因为它也在代码中,但在应用程序崩溃之前不会受到影响。

4

3 回答 3

13

看来,将代码中引用附加和分离的几个位置替换为添加和删除将允许代码在 API 级别 13 之前的环境中正常运行。

    public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;

        // Check to see if we already have a fragment for this tab, probably
        // from a previously saved state.  If so, deactivate it, because our
        // initial state is that a tab isn't shown.
        mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null) { // && !mFragment.isDetached()) {
            FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
            //ft.detach(mFragment);
            ft.remove(mFragment);
            ft.commit();
        }
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        //if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
            ft.add(android.R.id.content, mFragment, mTag);
        //} else {
        //    ft.attach(mFragment);
        //}
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            //ft.detach(mFragment); //requires API 13
            ft.remove(mFragment); //this does not do the same thing as detach
        }
    }
于 2011-11-06T05:58:50.880 回答
2

如果您在 API 4+ 兼容包 -android.support.v4.app.FragmentTransaction 中使用 FragmentTransaction - 您应该能够在 API 级别 13 之前的平台上调用附加和分离方法。

http://developer.android.com/resources/samples/Support4Demos/index.html

于 2012-03-25T16:47:31.743 回答
1

或者只使用http://actionbarsherlock.com/ 您将获得从 2.x 开始的一致的操作栏体验

于 2013-01-11T14:23:44.810 回答