1

GridView の位置で項目ビューを取得したいのですが、その方法がわかりません。

gridView.getChildCount()を繰り返し処理しようとしましたが、0 が返されます ( https://stackoverflow.com/a/8944678/1788704 )。

gridView.getCount()を呼び出すと、25 (グリッドビューのアイテムの正確な数) が返されます。

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

これが私のグリッドセルのスクリーンショットです: グリッドセル

4

1 に答える 1