在似乎没有必要的情况下将上下文存储在适配器中
Storing context in an adapter when it seems unnecessary to do so
我在这里查看有关如何使用适配器处理实时查询的示例:ToDoLite-Android LiveQueryAdapter,我对这部分有疑问:
private LiveQuery query;
private QueryEnumerator enumerator;
private Context context;
public LiveQueryAdapter(Context context, LiveQuery query) {
this.context = context;
this.query = query;
query.addChangeListener(new LiveQuery.ChangeListener() {
@Override
public void changed(final LiveQuery.ChangeEvent event) {
((Activity) LiveQueryAdapter.this.context).runOnUiThread(new Runnable() {
@Override
public void run() {
enumerator = event.getRows();
notifyDataSetChanged();
}
});
}
});
query.start();
}
在一些活动中,he/she 使用了扩展 LiveQueryAdapter 的适配器。适配器通过传入 activity 和实时查询进行初始化。
示例here:
// 'this' are all activities, I think
mAdapter = new ListAdapter(this, query.toLiveQuery());
mAdapter = new UserAdapter(this, getQuery().toLiveQuery());
mAdapter = new TaskAdapter(this, query.toLiveQuery());
所以这是我的问题:为什么我们需要在构造函数中存储该上下文?
跟runOnUiThread有关系吗?为什么不这样做:
((Activity)context).runOnUiThread(...
除了这一行之外,我没有看到存储的上下文变量在其他任何地方使用,那么为什么要保存它呢?
我知道可以在 getView() 中使用上下文,但是 his/her 代码使用 parent.getContext() 代替。另外,在我的代码中,我使用的是 RecyclerView 而不是 ListView,所以我什至没有我认为没有的 getView() 方法。
上下文允许适配器引用 activity 和应用程序状态。适配器需要上下文更新 activity 并访问任何 UI 组件
我在这里查看有关如何使用适配器处理实时查询的示例:ToDoLite-Android LiveQueryAdapter,我对这部分有疑问:
private LiveQuery query;
private QueryEnumerator enumerator;
private Context context;
public LiveQueryAdapter(Context context, LiveQuery query) {
this.context = context;
this.query = query;
query.addChangeListener(new LiveQuery.ChangeListener() {
@Override
public void changed(final LiveQuery.ChangeEvent event) {
((Activity) LiveQueryAdapter.this.context).runOnUiThread(new Runnable() {
@Override
public void run() {
enumerator = event.getRows();
notifyDataSetChanged();
}
});
}
});
query.start();
}
在一些活动中,he/she 使用了扩展 LiveQueryAdapter 的适配器。适配器通过传入 activity 和实时查询进行初始化。
示例here:
// 'this' are all activities, I think
mAdapter = new ListAdapter(this, query.toLiveQuery());
mAdapter = new UserAdapter(this, getQuery().toLiveQuery());
mAdapter = new TaskAdapter(this, query.toLiveQuery());
所以这是我的问题:为什么我们需要在构造函数中存储该上下文? 跟runOnUiThread有关系吗?为什么不这样做:
((Activity)context).runOnUiThread(...
除了这一行之外,我没有看到存储的上下文变量在其他任何地方使用,那么为什么要保存它呢?
我知道可以在 getView() 中使用上下文,但是 his/her 代码使用 parent.getContext() 代替。另外,在我的代码中,我使用的是 RecyclerView 而不是 ListView,所以我什至没有我认为没有的 getView() 方法。
上下文允许适配器引用 activity 和应用程序状态。适配器需要上下文更新 activity 并访问任何 UI 组件