java.lang.NoSuchMethodError при использовании getFragmentManager() с библиотекой 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 в качестве проектной библиотеки для своего собственного проекта...


person Leem.fin    schedule 08.02.2012    source источник


Ответы (2)


Метод getFragmentManager() доступен только с версии 3.0 в классе Activity. Поскольку ваш целевой SDK равен 13, а FragmentActivity расширяется от Activity, во время компиляции проблем не возникает.

Но когда вы запускаете свой код на более низком SDK (например, 7), в этом классе Activity такого метода нет. Итак, решение заключается в использовании:

 getSupportFragmentManager();

который будет работать на всех версиях Android.

person Ovidiu Latcu    schedule 08.02.2012
comment
Как вызвать getSupportFragmentManager() вне FragmentActivity? т.е. В реализации ViewGroup. - person Nguyen Minh Binh; 14.06.2012
comment
Спасибо, этот пост помог мне. - person Adam Varhegyi; 26.03.2013

Вам нужно использовать

Транзакция 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;
person Graham Smith    schedule 08.02.2012
comment
Чтобы убедиться, что ваш проект настроен правильно, я создал скриншот, расположенный по адресу youtube.com/watch?v. =avcp6eD_X2k, который теперь является частью часто задаваемых вопросов на сайте ABS. Это не распространяется на то, что вы просите, но гарантирует, что остальная часть проекта настроена правильно. - person Graham Smith; 08.02.2012
comment
импортировать android.support.v4.app.ActionBar; не работает, обойти? - person Ignacio Garat; 13.04.2013