使用带有actionbarsherlock库的getFragmentManager()时的java.lang.NoSuchMethodError

时间:2012-02-08 15:35:27

标签: android actionbarsherlock

我自己的项目使用:

<uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="13" />

要实施操作栏,我使用ActionBarSherlock库。我将 sherlock 库作为现有项目导入Eclipse。对于 sherlock ,目标平台为 Android v3.2 API 13

然后,我将 sherlock 作为库项目添加到我自己的项目中。我看到我自己的项目下有图书馆项目。一切似乎都很顺利。

我自己的项目主要活动如下:

package com.test;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MyActivity extends FragmentActivity {

    /**
     * hosts a Fragment, and the Fragment will inflate a layout to show
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FragmentManager fragMgr;
        FragmentTransaction fragTrans;

        fragMgr = getFragmentManager(); //error complains here


           FirstFragment list = new FirstFragment();

        fragTrans = fragMgr.beginTransaction();
        fragTrans.add(android.R.id.content, list).commit();

    }
}

但是,当我运行我的应用程序时,我得到以下错误

java.lang.NoSuchMethodError: com.test.MyActivity.getFragmentManager

为什么getFragment无法作为方法解析?我已经将sherlock用作我自己项目的项目库......

2 个答案:

答案 0 :(得分:31)

方法getFragmentManager()仅在3.0 Activity类中可用。由于您的目标sdk为13,而FragmentActivityActivity延伸,因此在编译时没有问题。

但是当您在较低的sdk(例如7)上运行代码时,Activity类中没有这样的方法。因此解决方案是使用:

 getSupportFragmentManager();

适用于所有Android个版本。

答案 1 :(得分:7)

您需要使用

  

FragmentTransaction transaction =   。getSupportFragmentManager()的BeginTransaction();

并确保您要导入:

import android.support.v4.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;