プログラムで子を追加した LinearLayout があります。
for (int i = 0; i < answers.size(); i++) {
final AnswerView answerView = new AnswerView(getContext(), i);
addView(answerView);
}
次に、ランダムな子にアクセスしようとしています:
private void updateOpenAnswer() {
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... voids) {
return API.getOpenAnswer();
}
@Override
protected void onPostExecute(Integer answerIndex) {
super.onPostExecute(answerIndex);
Log.i(TAG, "Child count: " + getChildCount());
if (answerIndex != -1) {
Log.i(TAG, "Open answer: " + answerIndex);
final AnswerView answerView = (AnswerView) getChildAt(answerIndex);
if (answerView != null) {
answerView.setAnswerOpen(true);
} else {
Log.e(TAG, "Null at " + answerIndex);
}
}
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
updateOpenAnswer は runnable で 1 秒に 1 回呼び出されます。updateOpenAnswer の一部の呼び出しでは、getChildAt が null を返し、getChildCount が 0 を返します。たとえば、2 と 3 は null で、0、1、4、5 は null ではありません。2 と 3 のビューは実際に存在し、私には見えます。null を返すのはなぜですか?