2017-03-21 14 views
1

私はRecyclerViewアダプタを持っています。これは、各アイテム内のいくつかのビューでOnClickリスナを実装する必要があります。ただし、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; 
    } 
} 
関連する問題