2016-11-25 2 views
0

Я пытаюсь получить view.getId() из представления, полученного с использованием recyclerView.findChildViewUnder(e.getX(), e.getY()), но она всегда возвращает -1getId() в представлении, полученном из recyclerView.findChildViewUnder (e.getX(), e.getY()) - -1

Вот соответствующий код:

 @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) { 
      View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
      if (view !=null) { 
       onClick(view); 
      } 
      return super.onSingleTapConfirmed(e); 
     } 

Вот как я зарегистрировать gesturelistener:

gestureDetector = new GestureDetectorCompat(getActivity(), new RecyclerViewGestureListener());

Я пытаюсь получить V Идентификатор iew в onClick(View view)

+0

что соотношение между *** view.getId() *** и *** recyclerView.findChildViewUnder (e.getX(), e.getY()) *** ???? –

+0

Кажется, что вы зарегистрировались для событий на родительском объекте вашего ресайклера, когда вы должны зарегистрироваться на самом экране ресайклера, чтобы получить правильное отображение координат событий движения. – Mariusz

+0

@ ΦXocę 웃 Пepeúpa ツ 'recyclerView.findChildViewUnder (e.getX(), e.getY())' возвращает представление? – syfy

ответ

0

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

если вы пытаетесь получить id в View в положении мероприятия, как это определено в макете XML, его очень возможно, что вид с идентификатором, что вы на самом деле хотите является родителем возвращенного зрения , поэтому следующий код может быть то, что вы хотите:

private void onClick(View view) { 

    // get a reference to the nearest ancestor View 
    // that has an id. 
    try { 
     while (view.getId() == View.NO_ID) { 
      view = (View) view.getParent(); 
     } 
    } catch (NullPointerException e) { 
     return; // no ancestors with an ID found 
    } catch (ClassCastException e) { 
     return; // cannot cast parent to View 
    } 

    // got the ID of a view 
    view.getId(); 
} 

если вы пытаетесь получить id из ViewHolder в View на позиции мероприятия, findContainingViewHolder() может быть полезным. следующий код может помочь ... если она по-прежнему возвращает -1, убедитесь, что getItemId() в пользовательской реализации ViewHolder переопределяется:

@Override 
public boolean onSingleTapConfirmed(MotionEvent e) { 
    View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
    if (view !=null) { 
     RecyclerView.ViewHolder viewHolder = recyclerView.findContainingViewHolder(view); 
     if (viewHolder != null) { 
      onClick(viewHolder); 
     } 
    } 
    return super.onSingleTapConfirmed(e); 
} 

private void onClick(RecyclerView.ViewHolder view) { 

    // got the ID of the ViewHolder 
    view.getItemId(); 
} 
Смежные вопросы