Подтвердить что ты не робот

Фрагментация активности на экране вращается

У меня есть простая активность фрагментов. В методе 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: невозможно выполнить экземпляр экземпляра: убедитесь, что имя класса существует, является общедоступным и имеет пустой конструктор, открытый

4b9b3361

Ответ 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