2016-07-19 2 views
1

Используйте mvvmcross для Xamarin.Android. Почему MvxCachingFragmentCompatActivity вызывает метод ExecutePendingTransactions в методе ShowFragment вручную? Какие действия выполняются с этим вызовом? Как я вижу, это может занять около секунды для нескольких устройств во время навигации. ThanksПочему MvxCachingFragmentCompatActivity вызывает ExecutePendingTransactions вручную?

ответ

1

В основном необходимо, если следующие действия полагаются на обработку commit() перед выполнением любых других действий.

Для MVVMCross особенно:

OnFragmentChanging(fragInfo, ft); 
ft.Commit(); 
SupportFragmentManager.ExecutePendingTransactions(); 
OnFragmentChanged(fragInfo); 

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

От API documentation.

После FragmentTransaction совершается с FragmentTransaction.commit(), он должен быть казнен асинхронно на главном потоке процесса. Если вы хотите, чтобы немедленно выполнял такие ожидающие операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это. Обратите внимание, что все обратные вызовы и другие связанные с ними действия будут выполняться в рамках этого вызова, поэтому будьте осторожны с тем, откуда это вызывается.

+0

Спасибо, Cyriac. Не могли бы вы посоветовать, как улучшить скорость навигации. Потому что теперь даже не очень сложный фрагмент может открыть около 2 секунд (для Nexus 4). В чем причина этого? возможно, отражение, когда привязки из axml создаются? Если я изменю его на привязки с кодом, может ли он улучшить мою скорость? – Karrde

+0

Ну, используя последнюю версию MVVMCross, это хорошее начало, так как они внесли некоторые изменения в привязки (https://github.com/MvvmCross/MvvmCross/issues/1342). Мое приложение перемещается примерно за секунду на активность, с фрагментом с двумя другими фрагментами между ними и tablayout в одном фрагменте, имея график реального времени в другом фрагменте (все мои привязки выполняются в axml). Так что, вероятно, это зависит от того, что вы делаете во время навигации. – Cyriac

+0

Хорошо. Но в дополнение к этому у меня проблема с анимацией - эффект пульсации висит, поскольку весь процесс навигации находится в основном потоке. Можно ли сделать anythinh, кроме добавления задержки до ShowViewModel? – Karrde

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