2017-03-21 2 views
1

각 항목의 여러보기에서 OnClick 수신기를 구현해야하는 RecyclerView 어댑터가 있습니다. 그러나 OnClick 수신기는 수신기 외부에서 변수를 변경해야하지만 OnClick 수신기 내부에서만 최종 변수를 사용할 수 있으므로 문제가됩니다. 저는 여기 온 클릭 리스너를 구현하는 내 코드입니다 :RecyclerView 어댑터 OnClick 매개 변수

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 

    final boolean liked = false; 
    holder.button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // here I can only reference a final variable, but I need to change it 
      if (!liked){ 
       liked = true; 
      } 
     } 
    }); 
} 

나는 또한 ViewHolder 클래스의 클래스 변수로 변수를 생성하고 holder.liked로 사용하려고는하지만, 여전히 최종해야합니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

이유는 당신이 방법을하기 전에 마음에 두지 마십시오? – ste9206

답변

2

대신 확장 viewholder에 OnClickListener를 구현하는 시도 :

private class LikeHolder extends RecyclerView.ViewHolder 
    implements View.OnClickListener { 

    private boolean mLiked = false; 

    public LikeHolder(LayoutInflater inflater, ViewGroup parent) { 
     super(inflater.inflate(R.layout.your_holder_layout, parent, false)); 

     itemView.setOnClickListener(this); 
     ... 
    } 


    @Override 
    public void onClick(View view) { 
    if (!mLiked){ 
      mLiked = true; 
    } 
} 
관련 문제