2016-09-16 6 views
-1

의도 된 행동 :ViewHolder 볼 뷰 위치가 아닌 절대 뷰 위치를 등록

안녕하세요 제가 ViewAdapter에 저장된 목록 <>에서로드 이미지의 격자를 표시 할 recyclerView을 사용하고 있습니다. 사용자가 이미지를 클릭하면 새로운 조각이 만들어지고 목록에 해당 항목이 인수로 주어집니다. <>. 이 코드

private class ShowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
//holder code... 

     @Override 
     public void onClick(View view) { 
      int itemPosition = mRecyclerView.indexOfChild(view); 

      Fragment newDetail = DetailFragment.newInstance(mShowAdapter.getList().get(itemPosition)); 
      //launch Fragment 
     } 
    } 

이이 작업을 수행 : 목록 <>에서 전달 될 수있는 항목을 반환 mShowAdapter.getList().get(itemPosition). 이보기의 모든 항목에 대해 잘 작동하지만 경우에만 아래로 스크롤하지 마십시오.

버그 : 내가 몇 페이지를 아래로 스크롤하고 내가 항목을 클릭하면

, 잘못된 항목을 목록에서 가져온 것입니다. 예를 들어 몇 페이지를 스크롤 한 후 처음 보이는 항목을 클릭한다고 가정 해 보겠습니다. 목록에서 검색된 항목은 실제로 목록 <>의 첫 번째 항목이며 27 번째 항목은 아닙니다.

이는 recyclerView가 VISIBLE 항목을 기준으로 클릭 위치를 등록하기 때문에 발생합니다. 내가 얼마나 아래로 스크롤해도 상관 없습니다. 세 번째로 보이는 항목을 클릭하면 맨 위에있는 세 번째 절대 항목을 쳤을 때와 같은 결과가됩니다.

어떻게 수정하여 올바른 항목을 검색 할 수 있습니까?

답변

1

int itemPosition = getAdapterPosition(); 
+0

질문을 막 수정하려고했습니다. 'int itemPosition = MyViewHolder.this.getAdapterPosition(); '을 사용하면 문제가 해결됩니다. – fgoogle

+0

@fgoogle 문제가 해결 되었습니까? –

+0

네, 알다시피 나는 당신의 대답을 받아 들였습니다. – fgoogle

0

onBindViewHolder()에서 onclick 수신기를 설정하려고합니다.

+0

이 매우 성능에 부담스러운 아닌가요 시도? – fgoogle