我在访问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;
}});
我在这里要做的是,我只是想改变背景颜色。但是当前视图中的最后一个元素的颜色正在发生变化。而且在按下之后也没有留下来。按下后它就会消失。
答案 0 :(得分:1)
在适配器的getView()
方法中,您应该将视图设置为可见或不可见,具体取决于支持适配器的数据的状态。
您不应该假设每个项目都有唯一的视图,适配器通常会重复使用滚动时出现在屏幕外的项目的视图。
答案 1 :(得分:0)
您可以尝试通知适配器
if( gridChild.getChildAt(k) instanceof ImageView ) {
gridChild.getChildAt(k).setVisibility(View.GONE);
notifyDataSetChanged();
}