2015-07-29 4 views
0

В моем коде используется recyclerview и реализуется onClick для различных элементов в каждом элементе (виде карты) списка. Одним из этих элементов является кнопка совместного доступа. Представленное в слушателе onClick представление передается через прослушиватель на фрагмент.RecyclerView - другой вид, возвращаемый в onClick

@Override 
public void onClick(View v) { 
    if(mListener != null) { 
     if(v instanceof ImageButton && v.getTag().equals("share")) { 
      mListener.onItemClick(v, TYPE_SHARE, getAdapterPosition()); 
     } 
    } 
} 

В реализации слушателя во фрагменте, вид корневой (вид карты) пройденного зрения получается

@Override 
public void onItemClick(View view, int type, int position) { 
    if(type == TYPE_SHARE) { 
     View r = view.getRootView() 
     View u = r.findViewById(R.id.card_view);//this is the list item 
     File file = LayoutScreenshot.getScreenshot(u); 
    } 
} 

, а затем снимок экрана этой точки зрения берется с помощью методов холст.

Хотя все это работает, проблема в том, что представление, возвращенное в onClick, не обязательно совпадает с тем, на которое пользователь нажал.

enter image description here

изображение для представления и мои взгляды немного больше занимать большую часть экрана. Если пользователь нажимает кнопку совместного доступа в пункте 2, например, возвращенное представление относится к одному из пунктов 1, 2 или 3 в зависимости от того, в каком направлении находится пользовательская прокрутка, и количество просматриваемого в настоящее время вида.

Я ошибаюсь, передавая «вид» фрагменту, а затем работаю над ним? Может ли кто-нибудь указать некоторые указатели?

ответ

0

Решение состоит в том, чтобы не полагаться на представление, передаваемое адаптером в слушателе onClick. Вместо этого используйте метод LayoutManager. Я сделал это

@Override 
public void onItemClick(View view, int type, int position) { 
    if(type == TYPE_SHARE) { 
     View r = mLayoutManager.findViewByPosition(position); 
     View u = r.findViewById(R.id.card_view);//this is the list item 
     File file = LayoutScreenshot.getScreenshot(u); 
    } 
} 

Таким образом, я использовал

Вид г = mLayoutManager.findViewByPosition (положение);

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