Можно ли создать фрагмент только с одним экземпляром

Мне просто интересно, может ли создание фрагмента иметь только один экземпляр или синглтон?

я прошел сквозьGoogle iosched проект тоже. Они просто создают

Fragment a = new Fragment();

Всякий раз, когда они хотят ...

Предположим, например:

public static FragmentManager instance;

    public static FragmentManager getInstance() {
        if (instance == null) {
            instance = new FragmentManager();
        }
        return instance;
    }

    public TestFragment getTestFragment() {
        if (testFragment == null) {
            testFragment = new TestFragment ();
        }

        return  testFragment 
    }
}

Могу ли я использовать вездеFragmentManager.getInstance().getTestFragment() для транзакции?

например:

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, FragmentManager.getInstance().getTestFragment())
    .commit();

Или ОС автоматически уничтожает ссылку или некоторые вопросы, связанные с ней?

Ответы на вопрос(3)

что вы не добавите или не замените один или несколько фрагментов одинаковыми »тип" дважды или более, то вы можете использоватьFragmentManager.BackStackEntry чтобы узнать, какой из ваших фрагментов в настоящее время находится на вершине стека.

String TAG_FIRST_FRAGMENT = "com.example.name.FIRST.tag";
String TAG_SECOND_FRAGMENT = "com.example.name.SECOND.tag";

FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager.getBackStackEntryCount() == 0 || 
    !fragmentManager.getBackStackEntryAt(
        fragmentManager.getBackStackEntryCount() - 1)
    .getName().equals(TAG_SECOND_FRAGMENT)) {
//Now it's safe to add the secondFragment instance

FragmentTransaction transaction = fragmentManager.beginTransaction();
//Hide the first fragment if you're sure this is the one on top of the stack 
transaction.hide(getSupportFragmentManager().findFragmentByTag(TAG_FIRST_FRAGMENT));
SecondFragment secondFragment = new SecondFragment();
transaction.add(R.id.content_frame, secondFragment, TAG_SECOND_FRAGMENT);
//Add it to back stack so that you can press back once to return to the FirstFragment, and
//to make sure not to add it more than once.
transaction.addToBackStack(TAG_SECOND_FRAGMENT);
transaction.commit();

} 

наковый тег или идентификатор.

Кроме того, хорошо повторно присоединить существующий фрагмент, а не создавать новый.

MyFragment f = (MyFragment) getFragmentManager().findFragmenByTag("my_fragment");

if(f == null){
  f = Fragment.instantiate(context, MyFragment.class.getName());
}

if(!f.isAdded()){
  //--do a fragment transaction to add fragment to activity, WITH UNIQUE TAG--
  //--Optionally, add this transaction to back-stack as well--
}

getSupportFragmentManager().beginTransaction().replace Вы можете добавить третий параметр в виде строки, которую вы можете использовать в качестве тега, так что если вы хотите восстановить предыдущий фрагмент, вы можете использоватьgetSupportFragmentManager().findFragmentByTag(String) так ты выигралНужно создать новый фрагмент.

Так было бы так

Проверьте, существует ли фрагмент, используяfindFragmentByTag(String) если он не существует, создайте новый фрагмент и вызовитеgetSupportFragmentManager().beginTransaction() .replace(R.id.content_frame,myFragment,myTag).commit(); где myTag - это строка тебяЯ буду использовать в вашем findFragmentByTag. Таким образом, вы выигралисоздать более одного фрагмента каждого типа.

Я надеюсь, что это имеет смысл :)

Для получения дополнительной информации проверьтеэтот а такжеэтот

Ваш ответ на вопрос