Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在GridView(onCreateView)中按位置获取项目视图?_Android_Android Gridview - Fatal编程技术网

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

Android 如何在GridView(onCreateView)中按位置获取项目视图?,android,android-gridview,Android,Android Gridview,我想在GridView中按位置获取项目视图,但我不知道如何操作 我试图迭代gridView.getChildCount(),但它返回0() 当我调用gridView.getCount()时,它返回25(我的gridView的确切项数) 当我尝试调用getCount循环中的getChildAt(position)时,我得到一个NPE 我要做的就是让item视图在item视图中获得2个ImageView,并在每个视图上设置一个setOnClickListener() 目前,我在gridView的se

我想在GridView中按位置获取项目视图,但我不知道如何操作

我试图迭代gridView.getChildCount(),但它返回0()

当我调用gridView.getCount()时,它返回25(我的gridView的确切项数)

当我尝试调用getCount循环中的getChildAt(position)时,我得到一个NPE

我要做的就是让item视图在item视图中获得2个ImageView,并在每个视图上设置一个setOnClickListener()

目前,我在gridView的setOnItemClickListener()中设置了这些侦听器

但是,当我第一次单击ImageView时,侦听器没有设置,然后就可以了(因为一旦单击单元格,它就会初始化)

@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
[... ... ...]
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
ImageView shutdown=(ImageView)v.findViewById(R.id.grid\u item\u shutdown);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getActivity(),“Down”,Toast.LENGTH_SHORT.show();
}
});
ImageView shutterUp=(ImageView)v.findViewById(R.id.grid\u item\u shutterUp);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getActivity(),“Up”,Toast.LENGTH_SHORT).show();
}
});
//侦听器的其余部分(正常行为)。
}
});
返回rootView;
}
以下是我的网格单元的屏幕截图:

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

getChildCount()是网格子级的大小,因此当您调用它时,网格没有子级,所以在这段时间内,您可能还没有在屏幕上绘制


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

我通常在自定义适配器中执行此类操作。只需扩展BaseAdapter
getView()
并将您的
onClicks()
放入其中我有自己的适配器。。。我很愚蠢。我以前不想使用它,因为我必须在onclick中创建一个线程(内部套接字),但是使用AsyncTask应该可以。谢谢
    @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;
}