2017-09-28 5 views
1

私は要素のそれぞれをクリックしたとき、私は、LinearLayoutsetVisibility(VISIBLE)その内部に、この作品の罰金を水平recyclerViewを持っています。私はそれsetVisibility(GONE)内で、前LinearLayoutを別の項目をクリックした場合、私は、同時に、LinearLayoutsetVisibilty(VISIBLE)(いつものように)現在の項目でクリックしたときrecyclerviewの他のアイテムを制御する方法は?

だから私が今欲しいのは、あります。

私がこれまで試したどのような

viewHolder.container.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    if(viewHolder.linearLayout.getVisibility() == View.VISIBLE){ 
     //hide 
     viewHolder.linearLayout.setVisibility(View.GONE); 
    }else{ 
     int nowClickedId = 0; 
     //hide LinearLayout of other position that clicked before 
     if(nowClickedId != position){ 
      viewHolder.linearLayout.setVisibility(View.GONE); 
     } 

     //show for current clicked item 
      viewHolder.linearLayout.setVisibility(View.VISIBLE); 

     //get current item position store at the array 
      nowClickedId = viewHolder.getAdapterPosition(); 
     } 
    } 
}); 

これまでのところ私は直前にクリックされた項目の制御を取得することができますどのように、現在位置の項目に制御を持っていますか?

+0

はなぜ書くのです 'int型nowClickedId = 0;'他のブロックで? –

答えて

3

クリックされたアイテムの位置を保存し、グローバルに宣言する変数を作成します。

private int nowclicked=-1; 

は、今すぐあなたのviewholder内の位置は、グローバル変数にストアにそれをクリックすると、データが変更されたアダプタを通知 notifyDataSetChanged()を呼び出すされるたびに。 onBindViewHolder

private class Sample extends RecyclerView.ViewHolder{ 

    public Sample(View itemView) { 
     super(itemView); 

     viewHolder.container.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       nowclicked = getAdapterPosition(); 
       notifyDataSetChanged(); 

      } 
     }); 
    } 
} 

posistionは等しいショーlinearLayout他にそれを隠すの場合。

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

    if(nowclicked==position){ 
     viewHolder.linearLayout.setVisibility(View.VISIBLE); 
    }else { 
     viewHolder.linearLayout.setVisibility(View.GONE); 
    } 
} 
+0

コードの2番目のブロックが 'ViewHolder'クラスの中に書かれていますか? – ken

+0

サンプルコードはあなたのビューホールダークラスになければなりません。このコードに従って、問題は解決されます。 – Anonymous

+0

は私が仲間.. – ken

1

はonBindViewHolder()メソッドの内部で、このコードを書いて、

holder.viewHolder.container.setOnClickListener(); 

そして、あなたはあなたがやりたいことができます位置をに従ってを書くことを確保するようにしてください。

関連する問題