2016-11-17 39 views
0

我是如何使用的適配器來這裏辦理實況查詢看例子: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()方法,我不認爲。

+0

是的,您可以按照您的說法進行操作。我認爲這只是爲了讓其他人瞭解代碼中發生的事情,但沒有任何區別。但也許在函數內部,您需要使用'final'簽名的變量。 – aleksandrbel

回答

1

上下文允許適配器引用活動和應用程序狀態。適配器需要上下文更新活動並訪問任何UI組件

+0

對,我明白,但不是那((活動)上下文).runOnUiThread(...正在做什麼? –

+0

所以你的問題是爲什麼要省心呢?我的原因是你爲什麼擔心它?它會如果直接使用上下文變量,也可以正常工作。 –

相關問題