在似乎没有必要的情况下将上下文存储在适配器中

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 组件