访问Android中的GridView中的单个项目

时间:2013-02-05 14:05:51

标签: android gridview android-view android-gridview

我在访问gridview中的单个项目时遇到问题。我有一个图像的网格视图。在长按单个项目时,我正在使用多模式监听器激活CAB菜单。在听众中,我能够做到

gridView.setVisibility(View.GONE);

但是我无法做到这一点并且它给出了NUll Pointer Exception

gridView.getChildAt(position).setVisibility(View.GONE);

我也试过这个:

ViewGroup gridChild = (ViewGroup) gridView.getChildAt(1);
int childSize = gridChild.getChildCount();
for(int k = 0; k < childSize; k++) {
 if( gridChild.getChildAt(k) instanceof ImageView ) {
      gridChild.getChildAt(k).setVisibility(View.GONE);
 }
}

我怎样才能克服这一点?

更新

在我的适配器getView()方法中:

 imageview.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
    overlay.setVisibility(View.VISIBLE);
    imageview.setBackgroundColor(Color.parseColor("#f9a49c"));
    return false;
}});

我在这里要做的是,我只是想改变背景颜色。但是当前视图中的最后一个元素的颜色正在发生变化。而且在按下之后也没有留下来。按下后它就会消失。

2 个答案:

答案 0 :(得分:1)

在适配器的getView()方法中,您应该将视图设置为可见或不可见,具体取决于支持适配器的数据的状态。

您不应该假设每个项目都有唯一的视图,适配器通常会重复使用滚动时出现在屏幕外的项目的视图。

答案 1 :(得分:0)

您可以尝试通知适配器

if( gridChild.getChildAt(k) instanceof ImageView ) {

gridChild.getChildAt(k).setVisibility(View.GONE);

notifyDataSetChanged();
}