我想在GridView中按位置获取项目视图,我不知道该怎么做。
我试图迭代gridView.getChildCount(),但它返回0(https://stackoverflow.com/a/8944678/1788704)。
当我调用gridView.getCount()时,它返回25(我的gridview的确切项目数)。
当我尝试使用getCount在循环中调用getChildAt(position)时,我得到一个NPE。
我想要做的就是获取项目视图以在项目视图中获取2个ImageView并在每个视图上设置setOnClickListener()。
目前,我将这些侦听器设置在gridView的setOnItemClickListener()中。
但是,当我第一次点击我的imageViews时,没有设置监听器,那么它是可以的(因为它在单击单元格时被初始化)。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
[... ... ...]
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
ImageView shutterDown = (ImageView) v.findViewById(R.id.grid_item_shutter_down);
shutterDown.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Down", Toast.LENGTH_SHORT).show();
}
});
ImageView shutterUp = (ImageView) v.findViewById(R.id.grid_item_shutter_up);
shutterUp.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Up", Toast.LENGTH_SHORT).show();
}
});
// The rest of the onItemClickListener (normal behavior).
}
});
return rootView;
}
这是我的网格单元的屏幕截图:
gridView.getCount()是适配器的大小,因此适配器中有25个项目
gridView.getChildCount()是网格子节点的大小,因此当你调用它时网格没有子节点,所以在这个时候你可能还没有在屏幕上绘制。
这就是为什么你得到一个NPE,因为你没有孩子的观点。