0

Я видел все связанные с ним вопросы и пробовал их ответы. У меня есть ListView внутри фрагмента, и метод onItemClick вызывается, когда внутри одного действия, но не вызывается в другом. Все остальное - то же самое. Я пробовал:ListView onItemClick not called

  • Изменение android:clickable явно.
  • Изменение android:focusable и android:focusableInTouchMode явно.
  • Телефон: listView.setItemsCanFocus.
  • Добавить атрибут android:descendantFocusability="blocksDescendants" как на фрагмент, так и на корень активности.

По-прежнему, он не работает. Это тот же самый фрагмент с одним адаптером, который не имеет условностей о том, в какой активности. Однако в одном действии он работает отлично, а в другом, onItemClick не вызывается. Я на ICS. Почему это произойдет?

UPDATE:

Вот соответствующий код в моем фрагменте:

dataSource = (ArrayList<Map<String, Object>>) task.getResult();
  
FeedAdapter adapter = new FeedAdapter(getActivity(), dataSource, getUser());
  
ListView list = (ListView) rootView.findViewById(R.id.listView);
  
list.setItemsCanFocus(true);
 //just trying these 
list.setOnItemClickListener(self);
  
list.setAdapter(adapter);
  
adapter.notifyDataSetChanged();
  
if (dataSource.size() == 0) {
  
    noPostsLabel.setVisibility(View.VISIBLE);
  
} 

И в моем адаптере:

public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    final Map<String, Object> post = objects.get(position); 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 
    if (convertView == null || convertView.getId() == R.id.headerRoot) { 
     view = inflater.inflate(R.layout.list_item_post_layout, parent, false); 
    } else { 
     view = convertView; 
    } 
    view.setClickable(false); //just trying these two now, they weren't here originally 
    view.setFocusable(false); 
    //populate 
    view.setTag(post); 

    [...] //populate the cell. very long code, redacted. 

    return view; 

} 

UPDATE 2:

I есть o реализовано, что некоторые ячейки также не могут быть выбраны в моей «рабочей» активности, когда у них есть видимый HorizontalScrollView внутри ячейки (у меня есть функция прикрепления файлов, и она видна только тогда, когда есть файлы. В противном случае он находится в состоянии видимости GONE). Я понятия не имею, почему это вызывает такие неприятности.

UPDATE 3:

Я также узнал, что взгляды внутри клетки реагируют. Это только вид ячейки, который не принимает ввода.

UPDATE 4:

Я в конечном итоге переместить логику обработчика нажмите на сам макет ячейки, вместо того, чтобы полагаться на обработчик зрения списка. Я знаю, что это не очень хорошая практика, но я должен был соответствовать сроку. Кроме того, теперь он работает довольно гладко. Я не закрываю/не отвечаю на вопрос, поскольку техническая проблема все еще присутствует, и я не нашел для нее реального решения. Я только что воспользовался обходным решением для удовлетворения моего проекта.

+0

Некоторый код может помочь в решении проблемы. –

+0

@EugeneH откуда? –

+0

Из ваших двух фрагментов и действий, которые относятся к сообщению. Интерфейсные обратные вызовы (если они есть), реализуют список. –

ответ

0

Вы пытались установить обратные вызовы для фрагментов? Именно так рекомендует Android. Вы можете проверить - https://developer.android.com/training/basics/fragments/communicating.html#Deliver

+0

Как мне это сделать, что это касается моего дела? –

+0

Веб-страница предназначена для связи между фрагментами и Activity, также называемой интерфейсом/обратным вызовом. Это не похоже на прослушиватель событий, например. onItemClick(). –

1

Я не уверен в вашей проблеме, и я не вижу полного кода для отладки. Я отправлю пример кода, который обычно должен работать во Фрагменте.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    ListView list = (ListView) view.findViewById(R.id.listView); 

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int positi on, long id) { 
      Log.d(TAG, "onItemClick"); 
    } 
    }); 

Примечание:

  • Я не использую корень или любой другой объект в кэш.Я использую параметр view для вызова findViewById().
  • Я тоже не знаю. Вместо этого я создал новый вид или AdapterView.
+0

'self' был окончательной ссылкой на' this' внутри метода, который вызывается из внутреннего класса. –