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

Lee*_*fin 8 android actionbarsherlock

我自己的项目使用:

<uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="13" />
Run Code Online (Sandbox Code Playgroud)

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

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

我自己的项目主Activity看起来像这样:

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();

    }
}
Run Code Online (Sandbox Code Playgroud)

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

java.lang.NoSuchMethodError: com.test.MyActivity.getFragmentManager
Run Code Online (Sandbox Code Playgroud)

为什么getFragment不能解决这个方法?我使用sherlock作为我自己项目的项目库......

Ovi*_*tcu 31

该方法getFragmentManager()仅在3.0版本中可用Activity.因为你的目标SDK是13,而FragmentActivity扩展从Activity有在编译的时候没有任何问题.

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

 getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud)

这将适用于所有Android版本.


Gra*_*ith 7

你需要使用

FragmentTransaction事务= 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;
Run Code Online (Sandbox Code Playgroud)