Я смотрю на исходный код ListActivity
и вижу, что определяется приватный Handler
и что Runnable
отправляется этому обработчику в методе onContentChanged()
.
Я не совсем понимаю в этом суть, поскольку обработчики, насколько я понимаю, существуют для связи между потоками. Здесь определение обработчика и публикации происходит в одном потоке, и в вызове post () не указывается задержка. Я также не вижу, чтобы этот обработчик использовался для чего-либо еще.
Я, наверное, что-то неправильно понял об использовании обработчиков здесь. Почему это делается так, как здесь, а не просто с помощью прямого запуска mList.focusableViewAvailable()
(вызов внутри исполняемого файла)? Разве результат не будет таким же?
Ниже, на мой взгляд, приведены соответствующие части исходного кода ListActivity
:
public class ListActivity extends Activity {
protected ListView mList;
private Handler mHandler = new Handler();
private Runnable mRequestFocus = new Runnable() {
public void run() {
mList.focusableViewAvailable(mList);
}
};
/**
* Updates the screen state (current list and other views) when the
* content changes.
*
* @see Activity#onContentChanged()
*/
@Override
public void onContentChanged() {
super.onContentChanged();
View emptyView = findViewById(com.android.internal.R.id.empty);
mList = (ListView)findViewById(com.android.internal.R.id.list);
if (mList == null) {
throw new RuntimeException(
"Your content must have a ListView whose id attribute is " +
"'android.R.id.list'");
}
if (emptyView != null) {
mList.setEmptyView(emptyView);
}
mList.setOnItemClickListener(mOnClickListener);
if (mFinishedStart) {
setListAdapter(mAdapter);
}
mHandler.post(mRequestFocus);
mFinishedStart = true;
}
}