我有一个导航抽屉,它有一个适配器用一些数据填充ListView。我使用Retrofit进行API调用以获取数据,并使用回调方法。但是,当getCount方法被调用时,因为回调尚未完成,所以在适配器中出现错误。很明显,我遇到了一个架构问题,所以我很乐意听到任何想法来改善这一点。通过改进回调填充的Android适配器
private class NavigationDrawerAdapter extends BaseAdapter {
private Context _ctx;
private List<Foo> _foo;
public NavigationDrawerAdapter(Context ctx) {
_ctx = ctx;
setupFoo();
}
private void setupFoo() {
SharedPrefsHelper prefs = new SharedPrefsHelper(_ctx);
String userID = prefs.getItem("userID", "");
ApiManager.getFooService(_ctx).getFoo(userID, fooCallback);
}
Callback fooCallback = new Callback<List<Foo>>() {
@Override
public void success(List<Foo> foo, Response response) {
_foo = foo;
}
@Override
public void failure(RetrofitError e) {
Log.e(Constants.TAG, "Could not get foo: " + e.getMessage());
}
};
@Override
public int getCount() {
// This will throw NullPointerException because _foo isn't populated yet
return _foo.size();
}
}
谢谢,这工作。并感谢代码片段。 – Matt 2015-03-10 10:25:25