2013-06-26 5 views
0

Что я пытаюсь сделать, так это приложение типа «мастер/детализация», где один из моих опций выбора - это карта Google с некоторыми дополнительными кнопками под макетом карты.Заменить фрагмент макета, содержащего фрагмент

Все мои другие варианты просто загрузите фрагмент в FrameLayout, используя что-то вроде:

getSupportFragmentManager().beginTransaction() 
    .replace(R.id.content, myFragment, fragTag) 
    .commit(); 

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

Я не думаю, что я могу просто позвонить

getSupportFragmentManager().beginTransaction() 
    .replace(R.id.content, myCompositeView, fragTag) 
    .commit(); 

На данный момент я делаю это:

Fragment currentFrag = getSupportFragmentManager().findFragmentById(R.id.content); 
getSupportFragmentManager().beginTransaction().remove(currentFrag); 

LayoutInflater inflator = LayoutInflater.from(this); 
ViewGroup container = (ViewGroup)findViewById(R.id.content); 
container.removeAllViews(); 

View mapView = inflator.inflate(R.layout.store_finder, container, true); 

Это делает его немного неаккуратно при замене этого с другими фрагментами снова Мне нужно снова удалить все виды из макета. Кроме того, я не уверен, как правильно удалить MapFragment после его настройки таким образом.

Я бы признателен за любую помощь и для кого-то, чтобы положить свой ум в покое :)

Сноска: Видимо Вложенные фрагменты являются вещью в настоящее время, но не уверен, что это так, как я хочу пойти на что-то просто. http://developer.android.com/about/versions/android-4.2.html#NestedFragments

+0

Я имел обыкновение использовать этот трюк: http://pastebin.com/CLRNd4BT как об этом? – deadfish

+0

Кажется, вы заменяете один фрагмент другим? Это не то, что я прошу –

+0

*, но не уверен, что так я хочу пойти на что-то простое. * - нет другого бесполезного способа. Фрагмент был предназначен для замены другим фрагментом, а не фрагментом макета +. – Luksprog

ответ

0

Вложенные Фрагменты suppported, смотрите:

http://developer.android.com/reference/android/app/Fragment.html#getChildFragmentManager()

Я их использования в текущем приложении/проекта, и они прекрасно работают. Не уверен, есть ли какие-либо дополнительные ограничения при использовании их с вашим видом отображения?

// Wildstyle

+0

Я только что увидел, что они поддержали и обновили мой вопрос с небольшой сноской. Я чувствую, что это может быть более грязным, чем требуется. Я считаю, что MapFragments является мерзостью, потому что так много переключений между потоком пользовательского интерфейса и AsyncTasks, а также между материалами, сделанными во Фрагментах, и материалом, сделанным в Action. Я не хочу делать это более сложным, чем это уже есть: \ –

+0

Я могу это понять ... однако, если вы хотите сложный составной вид и хотите использовать простоту замены, то есть другим фрагментом, тогда это будет возможно, лучший путь. В противном случае, возможно, у вас может быть другой вид содержимого/контейнер в вашем основном макете специально для сопоставления, для использования отдельно (показать/скрыть, когда это не требуется)? – WildStyle

+0

Все, что мне действительно нужно добавить, это кнопка и TextView. Возможно, вложенные фрагменты - лучший способ сделать это ... –