android.app.Application调用ArrayAdapter.notifyDataSetChanged

时间:2012-11-08 00:43:10

标签: android

我有一个静态类,它扩展了android.app.Application( HireApplication ),它正在做很多我的后台工作。我在这里创建AsyncTasks,我存储了我的应用程序使用的最大数据对象。我在Application类中编写此代码,以便我可以在电话和平板电脑的单独活动之间重用它。

这感觉就像布局我的应用程序的正确方法,但现在我有一个问题。 AsyncTask已完成,需要在片段中的ArrayAdapter上运行notifyDataSetChanged( ListFragment )。

这是我的解决方案:

ListFragment:

public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    myListAdapter = new MyListAdapter(getActivity(), HireApplication.myList);
    HireApplication.myListAdapter = myListAdapter; // Tell the application where the ListView is so that it can notifyDataSetChanged
}

HireApplication:

public static ArrayAdapter<BikeStation> stationListAdapter = null;

private static void asyncTaskCompleteCallback() {
    {...}
    myListAdapter.notifyDataSetChanged();
}

现在,这有效......但感觉不对。我给应用程序提供了一个参考UI元素的参考,听起来它有点紧密耦合,但我不知道更好的方法来做到这一点。

我的应用程序是否有更好的方式通知我的ArrayAdapter或Fragment它应该采取一些措施来更新用新数据的UI?

干杯。

1 个答案:

答案 0 :(得分:0)

整个事情对我来说都是错误的...如果您使用的是片段和适配器,那么您应该使用LoadManager而不是AsyncTasks。此外,将所有内容放在您的应用程序上似乎是您想要解决的问题的一个糟糕的解决方案;它会导致内存泄漏并且感觉不对。