getChildAt返回null

时间:2013-03-13 15:33:02

标签: android android-linearlayout

我有一个以编程方式添加子项的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中每秒调用一次。 对于updateOpenAnswer的一些调用,getChildAt返回null并且getChildCount返回0!例如,对于2和3为null,对于0,1,4,5不为null。 2和3的观点确实存在,我看到它们。为什么它返回null?

1 个答案:

答案 0 :(得分:1)

  

最终AnswerView answerView = new AnswerView(getContext(),i);

最有可能的问题是getContext()返回null。尝试将其更改为

YourActivity.this // this also returns Context

现在它应该有效。

更新

不记得getChildAt()仅返回正在显示的位置的视图。因此,如果您正在滚动并希望获得不在“视图中”的子项,则将返回null。