Фрагмент активности падает при повороте экрана - PullRequest
16 голосов
/ 09 ноября 2011

У меня есть простой фрагмент активности.В методе onCreate () я просто добавляю фрагмент.Код размещен ниже.Однако каждый раз, когда я поворачиваю экран, система снова вызывает onCreate (), а затем происходит сбой в операторе super.onCreate ();Я предполагаю, что это общая проблема фрагмента Android.Кто-нибудь может мне помочь?

public class FragActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedState){
        super.onCreate(savedState);

        MyFragment frag = new MyFragment();
        getSupportFragmentManager().beginTransaction().replace(android.R.id.content, frag)
        .commit();        
    }
}

Прикреплена трассировка стека:

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {}: android.support.v4.app.Fragment $ InstantiationException:Невозможно создать экземпляр фрагмента: убедитесь, что имя класса существует, общедоступно и имеет пустой конструктор, который общедоступен

Ответы [ 5 ]

22 голосов
/ 09 ноября 2011

Ну, как говорится в вашей ошибке, что-то не так с вашим классом MyFragment.Убедитесь, что у вас есть что-то вроде:

public class MyFragment extends Fragment

при объявлении вашего класса фрагмента.Кроме того, у вас не должно быть никакого конструктора в классе.Поэтому убедитесь, что у вас его нет.

Если вы отправите код для своего класса фрагмента, мы сможем помочь вам лучше.

4 голосов
/ 25 марта 2013

Ваш фрагмент не должен иметь конструкторов из-за того, как FragmentManager его создает.Вы должны определить статический метод newInstance() и передать любые параметры через аргументы (связка)

Например:

public static final MyFragment newInstance(int title, String message)
{
    MyFragment fragment = new MyFragment();
    Bundle bundle = new Bundle(2);
    bundle.putInt(EXTRA_TITLE, title);
    bundle.putString(EXTRA_MESSAGE, message);
    fragment.setArguments(bundle);
    return fragment ;
}

И прочитать эти аргументы в onCreate:

@Override
public void onCreate(Bundle savedInstanceState)
{
    title = getArguments().getInt(EXTRA_TITLE);
    message = getArguments().getString(EXTRA_MESSAGE);

    //...

}

Таким образом, если отсоединенное и повторно присоединенное состояние объекта может быть сохранено через аргументы, во многом как связки, присоединенные к Intents.

1 голос
/ 09 января 2013

Класс Fragment также не должен быть внутренним классом, поскольку он создается вне области действия класса Activity. Вложенный класс в порядке.

1 голос
/ 29 октября 2012

Я столкнулся с подобной проблемой, когда переименовал имя пакета моего проекта. Класс фрагмента ссылается на макет XML и обычно содержит полное имя пакета. Вот где проблема. У моего имени класса фрагмента все еще было старое имя пакета.

0 голосов
/ 24 августа 2016

Добавление

static

Исправлено для меня

public class MyFragment extends Fragment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...