【问题标题】:How to get Item View by position in GridView (in onCreateView )?如何按 GridView 中的位置(在 onCreateView 中)获取项目视图?
【发布时间】:2013-06-25 14:14:37
【问题描述】:

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

这是我的网格单元格的屏幕截图:

【问题讨论】:

  • 我通常在自定义适配器中做这种事情。只需扩展 BaseAdapter getView() 并将您的 onClicks() 放在那里
  • 我有自己的适配器...而且我很愚蠢。我以前不想使用它,因为我必须在我的 onClicks 中创建一个线程(内部套接字),但是使用 AsyncTask 应该没问题。谢谢。

标签: android android-gridview


【解决方案1】:

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

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

这就是您获得 NPE 的原因,因为您没有要获得的子视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多