我是如何使用的適配器來這裏辦理實況查詢看例子: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();
}
在幾個活動中,他/她使用擴展LiveQueryAdapter的適配器。適配器通過傳遞活動和實時查詢來初始化。
例子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()中使用,但他/她的代碼使用parent.getContext()來代替。此外,在我的代碼中,我使用RecyclerView而不是ListView,所以我甚至沒有getView()方法,我不認爲。
是的,您可以按照您的說法進行操作。我認爲這只是爲了讓其他人瞭解代碼中發生的事情,但沒有任何區別。但也許在函數內部,您需要使用'final'簽名的變量。 – aleksandrbel