2016-11-17 15 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

Да, вы можете сделать то, что вам сказали. Я думаю, что это просто для других, чтобы понять, что происходит в коде, но не имеет значения. Но, возможно, внутри функции вам нужно будет использовать переменную с «финальной» подписью. – aleksandrbel

ответ

1

Контекст позволяет адаптеру ссылаться на состояние активности и приложения. Адаптеру требуется контекстное обновление активности и доступа к любым компонентам пользовательского интерфейса.

+0

Правильно, и я это понимаю, но не это то, что ((Активность) контекста) .runOnUiThread (... делает? –

+0

, так что ваш вопрос - зачем беспокоиться о его сохранении?) Мое дело, почему вы беспокоитесь об этом? работать отлично, если вы также использовали контекстную переменную. –

 Смежные вопросы

  • Нет связанных вопросов^_^