2013-11-21 2 views
0


У меня есть собственный список видов. Я хочу обновить это представление списка, когда пользователь вводит новые данные (я использовал диалог для вставки данных). Я успешно сделал это по телефону
Обновить список Показать сразу

adapter.notifyDataSetChanged(); 

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

{Listview (активность) и Dialog (простой класс, расширяющий DialogFragment) находятся в двух отдельных файлах классов}.

В настоящее время данные обновляются только тогда, когда пользователь взаимодействует со списком активности после ввода данных. Есть ли способ вызвать onResume из Activity ListView (я поставил функцию обновления в onResume) сразу, когда диалог отклоняется.

+0

Когда вы вызываете 'adapter.notifyDataSetChanged();'? Попробуйте вызвать его в 'onResume()' активности 'ListView'. В чем проблема? –

+1

http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html. используйте 'OnDismissListener', а затем обновите listview, используя' adapter.notifyDataSetChanged() '. – Raghunandan

+0

@AmulyaKhare, конечно, я назвал его inResume проблемой является onResume нужно вызывать сразу после того, как пользователь вводит данные, а диалог отклоняется. –

ответ

0

Что я вывел из приведенного выше описания, у вас есть активность A как listActivity и активность B как активность диалога. В активности A есть кнопка, которая активирует активность B и отображается диалог. Отклонить диалог, который вы хотите уведомить об активности A. Если мое предположение верно, у меня есть решение для вашей проблемы.

Попробуйте любой из следующих:

  1. В onWindowFocusedChanged() деятельности A, notifyDataSetChanged(), если значение HasFocus верно;

  2. активность А должны подписаться на деятельность B, когда в диалоге активности B уволен вызвать метод наблюдателя от деятельности А.

  3. или Вы можете задать активность А начать деятельность В течение некоторого результата, вызвав startActivityForResult прохождения в коде запроса. Когда активность B закончится, он перешлет вызов методу onActivityResult.

+0

Наконец, вы только что сделали свой день Первый (onWindowFocusedChanged()) работал для меня. –

+0

Удовольствие помогло :) – Hardik4560

1

Если я правильно понял, у вас есть активность A со списком ListView. Активность A открывает активность B. Активность B имеет диалог. Вы хотите обновить ListView после того, как пользователь будет взаимодействовать с этим диалогом?

Один из подходов состоит в том, чтобы позвонить adapter.notifyDataSetChanged() (тот, который вы используете) внутри деятельности A onResume(). Это происходит каждый раз, когда вызывается метод onResume, даже если ничего не обновлять.

Другой подход заключается в том, чтобы сделать Activity B отправить сообщение активности A, чтобы сообщить ему, что ListView необходимо обновить. вы можете сделать это, используя методы startActivityForResult и onActivityResult. Больше информации here и here.

+0

Ну, это приятное решение, но мой диалог не является активностью. Мне жаль, что я забыл упомянуть об этом выше. Это просто класс, который расширяет DialogFragment и возвращает alertDialog.create, когда я вызывал его из моей активности listview, используя dialog.show (getSupportFragmentManager(), MY_DIALOG); –

+0

Это еще проще сделать.Что вы можете сделать, так это создать метод внутри класса, который расширяет DialogFragment. Этот метод/сеттер должен передать «Runnable», который будет выполняться, когда пользователь вводит новые данные. Это поможет вам вызвать почти любой код, как если бы вы были на Activity A. – gian1200

+0

Согласовано, но я уже делал это в отдельном файле класса, чтобы избежать накладных расходов. И я не хочу его менять. И теперь у меня есть решение -> onWindowFocusedChanged(); –

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