2016-03-01 1 views
0

Привет У меня есть следующие ситуации:Как сказать фрагмент надуть View после его уже добавили без View

Я добавляю фрагмент без пользовательского интерфейса, чтобы сделать некоторый фон работы

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(btFragment, "btFragmentAsBackgroundWorker"); 
ft.commit(); 

После того, как он будет добавлен, пользователь не будет показан. Таким образом, он работает отлично. Но в какой-то момент пользователь может получить доступ к этому фрагменту, чтобы изменить некоторые вещи, поэтому я должен показать его с помощью пользовательского интерфейса.

Для того, чтобы показать его использовать как этот

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.remove(menuFragment).show(btFragment); 
ft.commit(); 

Но, очевидно, нет Просмотр завышены. Как я могу это достичь?

Я попробовал это, но я получаю сообщение об ошибке

ft.remove(menuFragment).add(R.id.fragmentMenu, btFragment); 

Ошибка:

java.lang.IllegalStateException: Fragment already added: BTFragment{5c942bb #1 id=0x7f0c0072 btFragmentAsBackgroundWorker} 

ответ

0

изменить код, как следовать ....

добавить фрагмент без вида

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(btFragment, "btFragmentAsBackgroundWorker"); 
ft.commit(); 

добавить вид

ft.replace(R.id.fragmentMenu,btFragment); 
    ft.commit(); 
+0

Я не хочу удалять btFragment, потому что у меня активные потоки, работающие там. Если я удалю его, все они будут уничтожены. –

+0

проверить редактирование может помочь вам –

+0

Я пробовал это также, по сути, это то же самое, что и 'remove(). Add()', и это не работает, потому что Фрагмент уже добавлен –

0

Создание вида является частью жизненного цикла фрагмента и на самом деле не может быть отложено. Я бы предположил, что вы хотя бы создали пустой контейнер ViewGroup в onCreateView(). Затем вы можете добавить виды в контейнер позже.

В качестве альтернативы рассмотрите возможность создания вида с видимостью GONE и установки его на VISIBLE, когда вы будете готовы отображать пользовательский интерфейс.

0

To add a fragment without a UI, add the fragment from the activity using add(Fragment, String) (supplying a unique string "tag" for the fragment, rather than a view ID). This adds the fragment, but, because it's not associated with a view in the activity layout, it does not receive a call to onCreateView(). So you don't need to implement that method.

Supplying a string tag for the fragment isn't strictly for non-UI fragments—you can also supply string tags to fragments that do have a UI—but if the fragment does not have a UI, then the string tag is the only way to identify it. If you want to get the fragment from the activity later, you need to use findFragmentByTag().

Смежные вопросы