我用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()
,那么我可以访问第一个孩子。
我在执行线程后没有想法触发该方法。
任何解决方案?
答案 0 :(得分:1)
尝试在gridView完成当前正在执行的操作时发布可运行的runnable(有关$(e.target)
here的更多信息):
View.post()
答案 1 :(得分:0)
找到它。
我使用了ViewTreeObserver
并且有效:
gridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
onShowTutorial();
}
});