我需要从服务器获取数据列表,馈送至适配器,并在 ListView 中显示。
问题是谁应该做后端调用、 Activity 或适配器或?
请详细说明原因。这个问题更多的是关于为什么而不是如何。
请在 Model View Controller 或类似的(我知道严格来说 android 没有 MVC)上下文中回答。
编辑:
现在对我来说很明显,适配器是获取数据的非常糟糕的地方(想象一下它将是多么不灵活。例如,如果类似数据有两个端点怎么办。或者我有两个适配器用于同一数据集,让其中一个适配器获取数据是没有意义的)。其他组件应该是获取数据和填充适配器。 Activity 是一个很好的组件。
已接受的答案提供了一个说明。
最佳答案
永远不要从 Activity 获取数据,因为它会阻塞 UI。
您应该根据需要使用参数和返回类型扩展AsyncTask。 在方法 doInBackground (@Override it) 和方法 onPostExecute (@Override it) 上做你的工作,在你的 Activity 上调用一些公共(public)方法来给它数据你拿来了。
最后,具有新数据的 Activity 应该将其提供给 Adapter。
这就是我始终获取数据的方式,并且我会 100% 获得所需的结果(添加一个进度条并在获取数据之前使其可见,并在将其提供给适配器后使其不可见)。
希望我对你足够清楚。如果您需要一些代码作为示例,请询问。
工作流程:
1 - Activity -> new MyAsyncTask(...).execute();//获取数据@Override doInBackGround
2 - MyAsyncTask.onPostExecute() {myActivity.giveFreshData(...)}//传递数据
3 - Activity.giveFreshData(...) {MyListAdapter.giveMyData(...)}
尽管这不是 MVC,但您应该将 UI 从数据消费和数据表示中分离出来。
关于android - MVC : who should fetch data, 适配器或 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345434/