2014-12-24 3 views
8

RecyclerView (그리고 필수 요소 인 ViewHolder 패턴)이 출시되기 전에는 보통 클릭 이벤트를 Activity/FragmentsetOnItemClickListener()을 사용하여 위임합니다. 이제 (따라서 뷰에 대한 수정이 그것에서 수행해야합니다, 안드로이드 개발할 때 나는 주로 "컨트롤러"객체로 Activity/Fragment를 참조하기 때문에.)RecyclerView - 클릭 이벤트는 어디서 처리해야합니까?

, RecyclerView으로 정말 그 어린이들에게 같은 방식으로 취급하지 않습니다 그리고 setOnItemClickListener() (또는 이와 유사한) 메소드가 더 이상 구현되지 않습니다. 발생할 수있는 클릭 이벤트는 어디에 처리해야합니까? 나는 모른다. 그러나 그들을 Adapter에서 취급하는 것은 나에게 어색하게 보인다.

우리는 어떻게해야합니까?

미리 감사드립니다.

+0

사용자 정의 ViewHolder가 OnClickListener를 구현하도록하십시오 – pskink

답변

4

리사이클러 뷰에 대한 viewHolder를 항상 생성하고 onBindView 메소드에서 클릭 수신기를 클릭을 수행하려는 뷰로 설정하십시오.

@Override 
public void onBindViewHolder(final ViewHolder viewHolder, int position) { 
viewHolder.mRelContent.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // perform ur click here 
     } 
    }); 
} 
+0

귀하의 메서드를 사용하여 종료했습니다. Volodymyr의 대답은 긴 프레스 이벤트를 처리 할 필요가없는 목록에 적합합니다. 그렇지 않으면 작업을하기 위해 심각한 조정이 필요할 것입니다. 너의 것이 훨씬 쉽게 구현 될 수있다. 감사! – ridsatrio

+0

그러나 코드에서이 ViewHolder를 다시 사용하고 다른 클릭/터치 핸들러를 제공하려는 경우이 방법은 적합하지 않습니다. 어댑터 (또는 ViewHolder) 외부에서 이벤트를 처리해야합니다. – plopd

+0

나는 이것을 처리하는 가장 좋은 방법은 활동 또는 조각 내부라고 생각한다 –

3

야곱의 implementationRecyclerView.OnItemTouchListener의. 나는 이것이 최선의 해결책이라고 생각한다.

희망이 있으면 도움이 될 것입니다. 문안 인사.

+0

왜이 방법이 대답으로 받아 들여지는 하나의 OP보다 낫다고 생각합니까? – veritas

+0

@veritas 허용 된 답변에서 뷰 소유자를 바인딩 할 때마다 클릭 수신기를 설정해야하기 때문에이 경우 RecyclerView에 대한 터치 리스너를 한 곳에서 설정 했으므로 그 것입니다. ListView처럼. –