我自己的项目使用:
<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用作我自己项目的项目库......
答案 0 :(得分:31)
方法getFragmentManager()
仅在3.0 Activity
类中可用。由于您的目标sdk为13,而FragmentActivity
从Activity
延伸,因此在编译时没有问题。
但是当您在较低的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;