2013-11-21 66 views
0


我有一个自定义列表视图。我想在用户输入新数据(我使用对话框插入数据)时更新此列表视图。我成功地通过呼吁
立即更新列表视图

adapter.notifyDataSetChanged(); 

每件事情都工作正常。唯一的问题是,我希望我的数据(在列表视图中)立即更新,因为对话框关闭。

{Listview(activity)和Dialog(简单的类扩展DialogFragment)在两个分开的类文件中。

当前数据仅在用户输入数据后与listview活动交互时更新。有没有什么办法可以在对话框关闭时立即调用ListView活动的onResume(我在onResume中放置更新函数)。

+0

什么时候调用'adapter.notifyDataSetChanged();'?尝试在ListView活动的'onResume()'中调用它,问题是什么? –

+1

http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html。使用'OnDismissListener',然后使用'adapter.notifyDataSetChanged()'更新列表视图。 – Raghunandan

+0

@AmulyaKhare当然我在调用onResume问题是onResume必须在用户输入数据和对话框关闭后立即调用。 –

回答

0

我从上面的描述推导出来的结果是,您将活动A作为listActivity和活动B作为对话活动。在活动A中有一些触发活动B的按钮,并显示一个对话框。关闭你想要通知活动的对话A.如果我的假设是正确的,我有你的问题的解决方案。

尝试以下任一:

  1. 在活动A的onWindowFocusedChanged(),notifyDataSetChanged()如果hasFocus值为true;

  2. 活动A应认购活动B,当活动B对话框内被驳回呼叫活动A的观测方法

  3. 或者你可以问一个活动通过调用startActivityForResult通过开展活动B中的一些结果在请求代码中。当活动B完成后,它会发回一个回调onActivityResult方法。

+0

最后,你只是让我的一天 第一个(onWindowFocusedChanged())为我工作。 –

+0

快乐吧:) – Hardik4560

1

如果我理解正确,你有一个ListView的活动A.活动A打开活动B.活动B有一个对话框。你想在用户和对话框进行一些交互之后更新ListView,对吧?

一种方法是在活动A的onResume()内呼叫adapter.notifyDataSetChanged()(您使用的那个)。每次调用onResume方法时都会发生这种情况,即使没有更新也是如此。

另一种方法是让活动B向活动A发送消息,让他知道需要更新ListView。您可以通过使用startActivityForResultonActivityResult方法来完成此操作。更多信息herehere

+0

这是一个很好的解决方案,但我的对话不是一项活动。对不起,我忘了提到这一点。这只是一个扩展DialogFragment的类,当我通过使用dialog.show(getSupportFragmentManager(),MY_DIALOG)从listview活动调用它时返回alertDialog.create; –

+0

这更容易做到。你可以做的是在扩展DialogFragment的类中创建一个方法。这个方法/设置者应该传递一个'Runnable',当用户输入新的数据时它将被执行。这可以帮助你触发几乎任何代码,就像你在活动A上一样。 – gian1200

+0

同意,但我已经在一个单独的类文件中做了,以避免开销。我不想改变它。我现在有一个解决方案 - > onWindowFocusedChanged(); –