Если у вас есть внутренний класс Fragment, такой как:
public class SomethingFragment extends Fragment {
public static final class TypeFragment extends BaseFragment
{
public static Fragment newInstance()
{
return new TypeFragment();
}
private View mRootView;
private ListView mListView;
/**
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
* android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
mRootView = inflater.inflate(R.layout.fragment_category_list, container, false);
mListView = (ListView) mRootView.findViewById(R.id.fragment_listview);
return mRootView;
}
}
}
Убедитесь, что ваш квалификатор public , когда FragmentActivity пытается повторно инициализировать фрагмент, который он не вызывает из конкретногокласс, он будет обрабатывать его из абстрактного FragmentActivity, и если ваш внутренний класс Fragment является закрытым, у Activity нет ссылок на onSaveState, onRestoreState, initialize и т. д.
Обновление:
Посмотрите на https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/Fragment.java
Метод instantiate
вызывает newInstance()
при попытке восстановить Fragment
из сохраненного состояния (где фрагмент был полностью уничтожен).
Метод newInstance
требует, чтобы класс был общедоступным, поэтому, когда он определен как внутренний класс, это означает, что он должен быть public
и static
, где это необходимо.
Надеюсь, что этопроясняет некоторые будущие вопросы.