2013-06-25 3 views
1

Я хотел бы получить вид элемента по позиции в GridView, и я не знаю, как это сделать.Как получить элемент Просмотр по позиции в GridView (в onCreateView)?

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

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

Когда я пытаюсь позвонить getChildAt (позиция) в цикле с 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; 
} 

Вот скриншот моей ячейки сетки: Grid cell

+1

Обычно я делаю это в пользовательском адаптере. Просто добавьте BaseAdapter 'getView()' и поставьте свой 'onClicks()' там –

+0

У меня есть свой собственный адаптер ... и я глуп. Я не хотел использовать его раньше, потому что мне нужно создать поток (сокет внутри) в моем onClicks, но с AsyncTask все должно быть в порядке. Благодарю. – kmas

ответ

0

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

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

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

+0

Как и в методе onCreateView, вы можете быть правы. – kmas

Смежные вопросы