2016-08-27 11 views
0

追加情報のためにボタンをクリックできるビューがあります。情報は最初隠され、クリックで明らかにされます。それをクリックしてからスクロールすると、レイアウトが再利用されます。新しいビューは、再利用されたときにクリックされずに隠された情報を表示します。recyclerviewでsetVisibility()を使用する正しい方法は何ですか

この問題を回避または解決するにはどうすればよいですか?

編集:1つの方法は、私はonBindViewHolderで再びビューを非表示にすることです。しかし、あなたはあなたのように、現在位置のオブジェクトの状態を保存する必要が、あなたはこの問題に直面した理由はRecyclerViewは、ユーザーがスクロールしたとき、それぞれのビューを作成防ぐために、ビューを再利用しようとすることです

をより良い方法

+0

アダプタコード –

+0

データをバインドする際には、可視性を設定する必要があります。これがバインドメソッドの目的です。どのような良い解決策を思いついていますか? –

+0

ビュー上のすべての前の操作を元に戻す代わりに。それは再建するように言われますか? – suku

答えて

-1

をしたいと思います私はサンプルアダプタ

@Override 
public void onBindViewHolder(final ContactViewHolder contactViewHolder, final int position) { 
    SampleObject eachObject = data.get(position); 

    if(eachObject.getCurrentState() == SampleObject.CLICKED){ 
     // hide button 
     // show additional information 
    } 
    else { 
     // show button 
     // hide additional information view 
    } 

にし、あなたのContactViewHolderクラスでそれを説明しようとここにあなたのアダプタをプッシュしていない

@Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.show_data: 
       SampleObject eachObject = data.get(position); 
       eachObject.setCurrentState(SampleObject.CLICKED); 
       break; 
-1

クリックした位置を追跡する必要があります。

//global scope 
int pos_clicked=-1; 
class View_Holder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    TextView txt; 
    public View_Holder(View itemView) { 
     super(itemView); 
     txt = (TextView) itemView.findViewById(R.id.txt); 
     txt.setOnclickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     Intent intent; 
     pos_clicked=getAdapterPosition(); 
      notifyDataSetChanged(); 
    }} 
@Override 
public void onBindViewHolder(View_Holder holder, int position) { 
    if(pos_clicked==position){ 
     holder.txt.setVisibility(View.VISIBLE); 
    } 
    else{ 
     holder.txt.setVisibility(View.GONE); 
    }} 
関連する問題