Управление потоком при одновременном уведомлении адаптера и цели стрельбы - PullRequest
0 голосов
/ 24 ноября 2011

Я пишу приложение для двухэкранного устройства Android.

У меня есть метод (который вызывается нажатием кнопки), который уведомляет адаптер (отображается на одном экране, т. Е. На RightActivity), а затем генерирует намерение для карты, отображаемой на другом экране (т.е. левая активность).Метод заключается в следующем:

public void onClick(View v) {

    MyAction.fireIntentToMap(context, myList); // fire intent to map on the left screen
    MyListAdapter.notifyDataSetChanged(); // adapter is for listview displayed on right screen
}

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

Однако этого не происходит.Что происходит, так это то, что вызов выполняется в методе fireIntenToMap, и намерение инициируется (т. Е. Выполняется вызов startActivity(intent);. Однако, прежде чем намерение может быть получено картой, выполняется строка MyListAdapter.notifyDataSetChanged();, ипредставление списка обновлено. Намерение получено картой позже.

Почему это происходит? Как я могу получить однопотоковое поведение (сначала обрабатывается намерение карты, затем обновляется представление списка) здесь?

.

1 Ответ

0 голосов
/ 24 ноября 2011

Как вы заметили, вы не можете контролировать, когда намерение действительно "доставлено".

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

Приоритет устанавливается через 'intentFilter.setPriority (..)' , когда вы регистрируетесь для приема трансляций через 'Context.registerReceiver (..)' .

Затем вы запускаете трансляцию с помощью `Context.sendOrderedBroadcast (..) '.

...