Как получить представление элемента по положению в GridView (в onCreateView)?

Я хочу получить представление элемента по положению в GridView и не знаю, как это сделать.

Я попытался перебрать gridView.getChildCount(), но он возвращает 0 ( https://stackoverflow.com/a/8944678/1788704).

Когда я вызываю gridView.getCount(), он возвращает 25 (точное количество элементов моего gridview).

Когда я пытаюсь вызвать getChildAt(position) в цикле с помощью getCount, я получаю NPE.

Что я хочу сделать, так это получить представление элемента, чтобы получить 2 ImageView внутри представления элемента и установить setOnClickListener() для каждого из них.

На данный момент я установил эти слушатели в setOnItemClickListener() gridView.

Но в первый раз, когда я нажимаю на свои изображения, прослушиватель не установлен, тогда все в порядке (поскольку он инициализируется после щелчка по ячейке).

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

Вот скриншот моей ячейки сетки: Ячейка сетки


person kmas    schedule 25.06.2013    source источник
comment
Я обычно делаю такие вещи в пользовательском адаптере. Просто расширьте BaseAdapter getView() и поместите туда свой onClicks()   -  person Ken Wolf    schedule 25.06.2013
comment
У меня есть собственный адаптер... и я тупой. Я не хотел использовать его раньше, потому что мне нужно создать поток (сокет внутри) в моих onClicks, но с AsyncTask все должно быть в порядке. Спасибо.   -  person kmas    schedule 25.06.2013


Ответы (1)


gridView.getCount() - это размер вашего адаптера, поэтому у вас есть 25 элементов в адаптере.

gridView.getChildCount() - это размер дочерних элементов сетки, поэтому у сетки нет дочерних элементов, когда вы вызываете это, поэтому в это время вы, вероятно, еще не рисовали на экране.

Вот почему вы получаете NPE, потому что у вас нет дочернего представления.

person Marcio Covre    schedule 25.06.2013