Фрагмент не отвечает на обновления UI и события Eventbus после резюме -- android поле с участием android-fragments поле с участием notifydatasetchanged поле с участием greenrobot-eventbus поле с участием fragment-lifecycle пол Связанный проблема

Fragment does not respond to UI updates and eventbus events after resume


6
vote

проблема

русский

У меня есть <код> SearchFragment класс, который расширяет класс под названием <код> BaseFragment , в котором <код> onResume и <код> onStop переопределен как Ниже:

 <код> @Override public void onResume() {   checkEventBusRegistration();     super.onResume(); } @Override public void onStop() {     EventBus.getDefault().unregister(this);     super.onStop(); } public void checkEventBusRegistration() {     if(!EventBus.getDefault().isRegistered(this))     {         EventBus.getDefault().register(this);     } }   

<Код> SearchFragment - это фрагмент, который показывает список результатов поиска. Нажав на каждый элемент, деталь продукта отображается на другом фрагменте на следующем вызове:

 <код> getFragmentManager().beginTransaction().replace(R.id.container, new ProductDetailFragment()).addToBackStack(null).commit();   

Кроме того, некоторые другие события в моем фрагменте не работают хорошо. Мой фрагмент имеет список, который не отвечает на <код> curl localhost:9080 0 .

После возврата от <код> curl localhost:9080 1 , абонент Eventbus не срабатывает, а некоторые события, такие как <код> curl localhost:9080 2 , принадлежащие адаптеру моего listView, не отвечают и отражают изменения на UI.

Отладка строк кода, вернувшись назад из <код> curl localhost:9080 3 , когда управление достигает <код> curl localhost:9080 4 eventbus все еще зарегистрировано, и он не требует регистрации снова, но сгенерированные события не вызывают подписчики.

В случае, если это помогает, здесь могил события жизненного цикла, выпущенные моим фрагментом:

События жизненного цикла на создании фрагмента:

 <код> curl localhost:9080 5  

События жизненного цикла При выходе из этого фрагмента заменив его:

 <код> curl localhost:9080 6  

События жизненного цикла При возврате к этому фрагменту:

 <код> curl localhost:9080 7  
Английский оригинал

I have a SearchFragment class which extends a class called BaseFragment in which onResume and onStop are overridden as below:

@Override public void onResume() {   checkEventBusRegistration();     super.onResume(); } @Override public void onStop() {     EventBus.getDefault().unregister(this);     super.onStop(); } public void checkEventBusRegistration() {     if(!EventBus.getDefault().isRegistered(this))     {         EventBus.getDefault().register(this);     } } 

SearchFragment is a fragment that shows a list of search results. By clicking each item, detail of product is shown on other fragment by below call:

getFragmentManager().beginTransaction().replace(R.id.container, new ProductDetailFragment()).addToBackStack(null).commit(); 

In addition some other events in my fragment do not work well. My fragment has a listView which does not respond to notifyDataSetChanged().

After returning back from ProductDetailFragment, eventbus subscriber are not triggered and some of events such as notifyDataSetChanged belonging to adapter of my listview do not respond and reflect changes on UI.

Debugging lines of code, after returning back from ProductDetailFragment, when control reaches to SearchFragment.onResume eventbus is still registered and it does not require registration again but generated events do not trigger subscribers.

In case it helps, here thre are the lifecycle events fired by my fragment:

Life cycle events on creating fragment:

onAttach onCreate onCreateView onViewCreated onViewCreated onStart onResume onCreateOptionsMenu onPrepareOptionsMenu 

Life cycle events when leaving this fragment by replacing it:

onPause onStop onDestroyView onDestroyOptionsMenu 

Life cycle events when returning back to this fragment:

onCreateView onViewCreated onViewCreated onStart onResume onCreateOptionsMenu onPrepareOptionsMenu 
</div
              
         
         

Список ответов

2
 
vote

Вы можете увидеть, что вы <код> onStop() вызывается, когда фрагмент заменен, чтобы произошла EventBus незарегистрированным:

События жизненного цикла При выходе из этого фрагмента заменив его:

 <код> onPause onStop onDestroyView onDestroyOptionsMenu   

А потом, когда вы вернетесь к фрагменту, ваш <код> onResume() вызывается, затем chirectbus зарегистрирован:

События жизненного цикла При возврате к этому фрагменту:

 <код> onCreateView onViewCreated onViewCreated onStart onResume onCreateOptionsMenu onPrepareOptionsMenu   

Но когда вы возвращаетесь из продукта продукта, предотвращают свой фрагмент <код> Math.abs0 еще не вызывается. Следовательно, метод подписки в фрагменте не вызывается.

 

You can see that you onStop() is called when the fragment is replaced so the EventBus unregistered:

Life cycle events when leaving this fragment by replacing it:

onPause onStop onDestroyView onDestroyOptionsMenu 

And then, when you back to the fragment, your onResume() is called then EventBus is registered:

Life cycle events when returning back to this fragment:

onCreateView onViewCreated onViewCreated onStart onResume onCreateOptionsMenu onPrepareOptionsMenu 

But when you returning back from ProductDetailFragment your fragment onResume() is not yet called. Hence the subscribe method in the fragment is not called.

</div
 
 
       
       
1
 
vote

Если вы проходите к вашему коду с отладчиком, откуда размещено событие, в <код> EventBus.post() на <код> postSingleEvent() на <код> postSingleEventForEventType() , какова ценность Это получает для <код> subscriptions ? Если переменная нуль или пустой, а метод возвращает false, то что-то не так с подпиской. Если это нет, или вы никогда не достигаете этого кода после размещения вашего мероприятия, то проблема будет где-то еще в вашем коде.

Я бы также рекомендовал регистрацию и незарегистрированных подписок событий в соответствующих парах жизненного цикла, либо зарегистрируйтесь в <Код> onStart() и не регистрируйте <код> onStop() или <код> onResume() код> onPause() .

Было бы полезно, если вы поделились большим количеством вашего кода, чтобы увидеть, где еще может быть проблема.

 

If you step through your code with the debugger from where the event is posted, into EventBus.post() to postSingleEvent() to postSingleEventForEventType(), what's the value it gets for subscriptions? If the variable is null or empty and the method returns false, then there is something wrong with the subscription. If it is not, or you never reach this code after your event is posted, then the problem would be somewhere else in your code.

I would also recommend registering and unregistering event subscriptions in matching lifecycle pairs, either register in onStart() and unregister in onStop() or onResume()/onPause().

It would be helpful if you shared more of your code to see where else there could be an issue.

</div
 
 

Связанный проблема

1  Android: Альтернатива для System_alert_window, чтобы отобразить наложение в App Action  ( Android alternative for system alert window to display an overlay across app ac ) 
Я хотел бы добавить функцию чата в моем приложении, который будет доступен во всех видах деятельности - вы можете начать чат в пределах одного вида деятельнос...

2  Ошибка доступа к SD-карте на Samsung Galaxy Note 3 Kitkat (4.4.x)  ( Error accessing the sd card on samsung galaxy note 3 kitkat 4 4 x ) 
Поскольку Samsung обновил Примечание 3 до 4.4.x, я получаю следующее исключение при записи на SD-карту: <код> java.io.IOException: open failed: EACCES (Perm...

2  Я хочу обновить приложение на PlayStore с измененной TargetSdkversion  ( I want update the application on playstore with changed targetsdkversion ) 
Я уже обновил приложение для playstore с указанным ниже используемым sdk: <код> <uses-sdk android:maxSdkVersion="23" android:minSdkVersion="...

13  Как нарисовать треугольник, звезду, квадрат или сердце на холсте?  ( How to draw a triangle a star a square or a heart on the canvas ) 
Я могу нарисовать круг и прямоугольник на холсте, используя <Код> path.addCircle() и <Код> path.addRect() . А теперь мне интересно, как нарисовать тре...

0  Освежающие виды внутри фрагмента андроида  ( Refreshing views inside an android fragment ) 
Так что я делаю приложение, которое использует и SQLite база данных. Он имеет 3 вдохновляемых вкладок, созданных с использованием фрагментов и таких. На одной...

0  Android Hint Letts XML  ( Android hint problems xml ) 
Добавил Android: hint = "Utilizador", но когда я бегу и когда я проверю приложение, падает на этикетки. и это должно быть в текстовом поле <код> <?xml ve...

-2  Схема базы данных для одного со многими отношениями  ( Database schema for one to many relationship ) 
Я хочу создать схему базы данных для следующего запроса 1) У него будет одна категория объекта (столбца), которая будет иметь несколько подкатегорий 2) и ...

1  Eclipse IDE отключается часто  ( Eclipse ide shuts down frequently ) 
Я пытался использовать SDK SDK SDK 22.3.0-887826, чтобы узнать о Develeopment Android, однако IDE отключается часто. Это происходит много, но в основном при и...

-1  Проблема с Edittext внутри ScrollView спрятана в InpoinkyBoard  ( Issue with edittext inside a scrollview getting hidden by the inputkeyboard ) 
HEJ, У меня есть Edittext для пользователя, чтобы войти в его местоположение, и это находится в ScrollView. Когда пользователь нажимает внутри него, я хочу,...

0  Как я могу удалить из View Recycler, если условие будет выполнено?  ( How can i remove from recycler view if the condition is met ) 
Так что я извлекаю данные из Firebase, то я хочу удалить элемент, если условие выполняется не в моей базе данных, просто удалить его из <код> recyclerview ...

1  WebView loaddatawithbaseurl java.lang.nullpointerexception  ( Webview loaddatawithbaseurl java lang nullpointerexception ) 
<код> //. . . public class MainActivity extends Activity { //. . . @Override protected void onCreate( Bundle savedInstanceState ) { //....

0  Не может назначить изображение Nullable ImageView  ( Cant assign an image to a nullable imageview ) 
Как я могу установить изображение на imageView? Идея моего приложения состоит в том, чтобы показать различный тип видового держателя RecyClerview в соответс...

1  Самый быстрый способ подключения Android к Arduino по беспроводной связи?  ( Fastest way to connect android to arduino wirelessly ) 
Я ищу действительно быстрый, простой, в основном подключаемый способ подключения Android, чтобы Arduino по беспроводной связи. Я ищу очень базовую функциональ...

4  Нет libffmpeg.so для аргументов командной строки после строительства FFMPEG для Android  ( No libffmpeg so for command line arguments after building ffmpeg for android ) 
Я следовал в руководстве Roman10 и сборка заканчивается просто хорошо. Но у меня есть файлы .so для всего, кроме ffmpeg.so (или я вижу это как libffmpeg.so ...

1  Исключение на скрытое название приложения с использованием листики  ( Exception on hiding title of the application using listactivity ) 
У меня есть класс, расширяющий <код> ListActivity , и я пытаюсь скрыть заголовок по умолчанию (я думаю, что это называется ActionBar), используя код ниже. Он ...

Связанный проблема

1  Android: Альтернатива для System_alert_window, чтобы отобразить наложение в App Action 
2  Ошибка доступа к SD-карте на Samsung Galaxy Note 3 Kitkat (4.4.x) 
2  Я хочу обновить приложение на PlayStore с измененной TargetSdkversion 
13  Как нарисовать треугольник, звезду, квадрат или сердце на холсте? 
0  Освежающие виды внутри фрагмента андроида 
0  Android Hint Letts XML 
-2  Схема базы данных для одного со многими отношениями 
1  Eclipse IDE отключается часто 
-1  Проблема с Edittext внутри ScrollView спрятана в InpoinkyBoard 
0  Как я могу удалить из View Recycler, если условие будет выполнено? 
1  WebView loaddatawithbaseurl java.lang.nullpointerexception 
0  Не может назначить изображение Nullable ImageView 
1  Самый быстрый способ подключения Android к Arduino по беспроводной связи? 
4  Нет libffmpeg.so для аргументов командной строки после строительства FFMPEG для Android 
1  Исключение на скрытое название приложения с использованием листики 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.