2013-11-22 5 views
2

У меня есть приложение, в котором можно получить несколько сообщений о чрезвычайной ситуации. Когда каждое сообщение получено, ему необходимо открыть диалоговое окно с информацией о чрезвычайной ситуации. Если получено более одной аварийной ситуации, она будет складывать диалоги, чтобы при последнем последнем сообщении о чрезвычайной ситуации и закрытии этого конкретного диалогового окна, должна появиться предыдущая самая последняя и неактивная аварийная ситуация, как если бы они были сложены.Обновление нескольких экземпляров одного и того же фрагмента диалога

Кроме того, детали для каждой аварийной ситуации обновляются каждые x секунд от службы, и эти изменения должны пробиваться к правильному экземпляру диалогового окна, так что, когда на экране отображается диалог, обновляется.

У меня было это, я думаю, неэффективным способом. Я сохранял экземпляр каждого объекта фрагмента диалога в списке и обновлял этот экземпляр с новыми подробностями, а затем открывал его. Это означало, что если бы 50 чрезвычайных ситуаций были спам, я хранили 50 диалогов. Не здорово для памяти.

Кроме того, этот метод не очень хорошо работал с ориентацией, где объект был разрушен и перестроен, он был извлечен из моего списка, и детали вернулись к исходным деталям, которые были сохранены в его намерениях.

Я ищу способ сделать это настолько эффективным, насколько это возможно, и я хотел спросить ваш коллективный мозг Android для предложений.

Как эффективно управлять несколькими экземплярами одного и того же класса диалога для получения требуемого поведения?

ответ

1

Что бы я сделал, просто удерживайте EmergencyMessage стек данных в моем Activity. Когда стек не пуст, я покажу новый DialogFragment и передам его EmergencyMessage сверху стека, используя Fragment.setArguments.

В моем DialogFragment я бы использовал Fragment.getArguments, чтобы получить сообщение EmergencyMessage и показать сообщение. Когда пользователь имеет дело с сообщением, сообщите о своей деятельности (for example like this) и закройте диалоговое окно. Затем, если у вас все еще есть необработанный EmergencyMessages в вашем стеке, просто повторите этот процесс.

Таким образом, у вас всегда будет один активный DialogFragment экземпляр, действующий в любой момент времени.

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

При создании диалогового окна, передать его тег «EmergencyMessageDialog», так что вы можете извлечь диалог позже и взаимодействовать с ним.

MyDialogFragment dialog = (MyDialogFragment) 
    getFragmentManager().findFragmentByTag("EmergencyMessageDialog"); 
dialog.updateEmergencyMessage(newEmergencyMessage); 

Если вы получаете обновления для EmergencyMessage что hasnt было показано ранее, вы можете просто обновить объект EmergencyMessage в стеке в деятельности, так что будет легко.

+0

Привет, Большое спасибо за ответ. Это почти то же самое, что и сейчас. Но это не дает эффекта наличия чрезвычайной ситуации. В том случае, если верхняя часть из двух закрыта, вторая должна быть открыта в пользовательском интерфейсе. Я исследую использование grid/listview, чтобы лучше обрабатывать эти кратные числа. – Stephen

+0

@Stephen Я не уверен, какой эффект «стека» вы говорите, но вы должны иметь возможность указывать анимацию для диалога show/hide. См. Http://stackoverflow.com/questions/13402782/show-dialogfragment-with-animation-growing-from-a-point – hendrix

+0

Привет, спасибо за обновление. Я считаю, что это определенно сработает – Stephen

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