GridView.getChildAt(index)返回null

时间:2017-03-30 15:44:09

标签: android gridview

我用AsyncTask填充GridView:

@Override
public void onLoad() {
    super.onLoad();
    //... set Loading view and actually get the data
    adapter = new DepartmentGridAdapter(getActivity(), R.layout.gird_department_item_layout,
            mSalesPresenter.getDepartments());
}

@Override
public void onDoneLoading() {
    super.onDoneLoading();
    gridView.setAdapter(adapter); // Populate the GridView
    onShowTutorial(); // <--- This is where I need to get the firstChild.
}

AsyncTask完成后,我只需要访问GridView的firstChild:

@Override
public void onShowTutorial() {
    if (gridView.getChildAt( gridView.getFirstVisiblePosition())!= null )
        // ... doStuff
}

但声明始终为null。我甚至为GridView调用了getCount,而且它不是0.问题似乎是GridView子节点不能立即访问。如果我在UI准备就绪后使用按钮强制执行方法onShowTutorial(),那么我可以访问第一个孩子。

我在执行线程后没有想法触发该方法。

任何解决方案?

2 个答案:

答案 0 :(得分:1)

尝试在gridView完成当前正在执行的操作时发布可运行的runnable(有关$(e.target) here的更多信息):

View.post()

答案 1 :(得分:0)

找到它。

我使用了ViewTreeObserver并且有效:

gridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            onShowTutorial();
        }
    });
相关问题