如何在GridView中的位置获取项目视图(在onCreateView中)?

时间:2013-06-25 14:14:37

标签: android android-gridview

我想在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;
}

以下是我的网格单元格的屏幕截图: Grid cell

1 个答案:

答案 0 :(得分:0)

gridView.getCount()是适配器的大小,因此适配器中有25个项目

gridView.getChildCount()是网格子节点的大小,因此当你调用它时网格没有子节点,所以在这个时候你可能还没有在屏幕上绘制。

这就是为什么你得到NPE,因为你没有孩子的观点。