Фрагментация активности на экране вращается
У меня есть простая активность фрагментов. В методе onCreate() я просто добавляю фрагмент. Код размещен ниже. Тем не менее, каждый раз, когда я поворачиваю экран, система снова вызовет функцию WithCreate(), затем она выйдет из строя в инструкции 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: не удается запустить Activity ComponentInfo {}: android.support.v4.app.Fragment $InstantationException: невозможно выполнить экземпляр экземпляра: убедитесь, что имя класса существует, является общедоступным и имеет пустой конструктор, открытый
Ответы
Ответ 1
Хорошо, как вы ошибаетесь, что-то не так с вашим классом MyFragment. Убедитесь, что у вас есть что-то вроде:
public class MyFragment extends Fragment
при объявлении класса фрагмента. Кроме того, у вас не должно быть конструктора в классе. Поэтому убедитесь, что у вас его нет.
Если вы разместите код для своего класса фрагментов, мы сможем помочь вам лучше.
Ответ 2
В вашем фрагменте не должно быть конструкторов из-за того, как его создает экземпляр FragmentManager.
У вас должен быть установлен статический метод newInstance()
и передать любые параметры через аргументы (bundle)
Например:
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.
Ответ 3
Я столкнулся с аналогичной проблемой, когда переименовал имя моего проекта. Класс фрагмента ссылается на макет xml и обычно содержит полное имя пакета. Там, где проблема была. Мое имя класса фрагмента по-прежнему имело старое имя пакета.
Ответ 4
Класс Fragment также не должен быть внутренним классом, поскольку он создается из области действия класса Activity.
Вложенный класс в порядке.
Ответ 5
Добавление
static
Исправлено это для меня
public class MyFragment extends Fragment