Сегодня я потерял часы, чтобы найти причину, к счастью, эта проблема связана не с реализацией MapFragment, но, к сожалению, это не работает, потому что вложенные фрагменты поддерживаются только через библиотеку поддержки от версии 11.
My реализация имеет действие с панелью действий (в режиме с вкладками) с двумя вкладками (без просмотра), один имеет карту, а другой - список записей. Конечно, я был очень наивным, чтобы использовать MapFragment внутри своих вкладки-фрагментов, et voila, приложение разбилось каждый раз, когда я переключился обратно на карту-вкладку.
(та же проблема, которую я также имел бы в случае моей вкладки -фрагмент будет раздувать любой макет, содержащий любой другой фрагмент).
Один из вариантов заключается в использовании MapView (вместо MapFragment) с некоторыми накладными расходами (см. MapView Docs вместо замены в layout.xml другой вариант - использовать библиотеку поддержки от версии 11, но затем использовать программный подход, поскольку вложенные фрагменты не поддерживаются с помощью макета. Или просто работайте программно, явно разрушая фрагмент (например, в ответе от Matt / Vidar), btw: тот же эффект достигается с помощью MapView (вариант 1).
Но на самом деле я не хотел потерять карту каждый раз, когда я убираю ее, то есть хочу сохранить он в памяти и очистке только после закрытия операции, поэтому я решил просто скрыть / показать карту во время табуляции, см. FragmentTransaction / hid е
Судя по вашей кодовой ручке , вы должны поднять обертку withRouter
до родителя, дать ему понять selectedType
и передать его компоненту сортировки. В вашем onHandleSort
вы можете установить новый query
.
class Parent extends Component {
// ...
handleClick (slug) => {
this.props.router.push({ query: { sorting: slug } })
}
// ...
render () {
const sorting = this.props.router && this.props.router.query
? this.props.router.query.sorting
: 'RELEVANCE';
return (
// ...
<Sort value={sorting} onHandleSort={this.handleClick} />
// ...
);
}
}
export default withRouter(Parent);
export default class Sort extends Component {
// ...
handleClick (param) => {
this.props.onHandleSort(param.slug)
}
// ...
render () {
const selectedType = this.props.sorting;
return (
// ...
);
}
}