0

グリッドビュー内の個々のアイテムにアクセスする際に問題が発生しています。画像のグリッドビューがあります。個々のアイテムを長押しすると、マルチモードリスナーでCABメニューがアクティブになります。リスナーの中で、私はすることができます

gridView.setVisibility(View.GONE);

しかし、私はこれを行うことができず、NUllPointerExceptionが発生します

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;
}});

ここでやろうとしているのは、クリック時に背景色を変更したいだけです。ただし、現在のビューの最後の要素の色が変更されています。そして、それもプレス後にとどまらない。押すと消えます。

4

2 に答える 2

1

アダプタのgetView()方法では、アダプタをサポートするデータの状態に応じて、ビューを表示するかどうかに設定する必要があります。

すべてのアイテムに固有のビューがあると想定するべきではありません。アダプターは通常、スクロール時に画面から消えるアイテムのビューを再利用します。

于 2013-02-05T14:54:40.833 に答える
0

アダプターに通知してみてください

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

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

notifyDataSetChanged();
}
于 2013-02-05T14:44:11.853 に答える