2016-05-26 9 views
0

HeaderViewとリストの最初の位置(位置== 0)とCommentViewの2種類のビューを使用するrecyclerViewを使用しています。Recyclerviewの行onClickレイアウトを置換する

onclick()は、HeaderViewを削除し、すでに作成済みの別のxmlレイアウトファイルに置き換えます。

アダプタクラス内で何かする必要がありますか? 私はこのようにしようとしている:

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

     // holder is instance of CommentItem 

     } else if (holder instanceof ViewHolderHeaderItem) { 
     final ViewHolderHeaderItem viewHolderHeaderItem = (ViewHolderHeaderItem) holder; 
     viewHolderHeaderItem.button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       viewHolderHeaderItem.button.setVisibility(View.GONE); 

      } 
     }); 

私はGONEに可視性を設定することができますが、私は私がレイアウトを膨らませることができますどのように表示されません。

答えて

0

このようなことができますか?

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private static final int TYPE_HEADER = 111; 
    private static final int TYPE_COMMENT = 222; 
    private boolean mHasHeader = true; 

    @Override 
    public long getItemId(int position) { 
     return mHasHeader && position == 0 ? TYPE_HEADER : TYPE_COMMENT; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return viewType == TYPE_HEADER 
       ? return new ViewHolderHeaderItem() 
       : return new ViewHolderCommentItem(); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     if (getItemViewType(position) == TYPE_HEADER) { 
      final ViewHolderHeaderItem viewHolderHeaderItem = (ViewHolderHeaderItem) holder; 
      viewHolderHeaderItem.button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        mHasHeader = false; 
        notifyDataSetChanged(); 

       } 
      }); 
     } else { 
      // bind your comment view 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return 0; 
    } 
} 
0

これは、2つのレイアウトを想定してください。

@Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 
     setTypeFace(holder); 
     if (position == 0) { 
      holder.header.setVisibility(View.VISIBLE); 
      holder.comment.setVisibility(View.GONE); 
     }else 
     { 
      holder.header.setVisibility(View.GONE); 
      holder.comment.setVisibility(View.VISIBLE); 
     } 
    } 

このようにしたいですか?

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v 
    if(viewType==COMMENT) { 
     v = LayoutInflater.from(mContext).inflate(R.layout.comment_xml, parent, false); 
    }else if(viewType==HEADER) 
    { 
     v = LayoutInflater.from(mContext).inflate(R.layout.header_xml, parent, false); 
    } 
    return new ViewHolder(v); 
} 
+0

私は可視性を変更したくありません。私はヘッダーの代わりに新しいレイアウトを膨らませたい – Mes

+0

@メス編集の回答を参照 – Nisarg

+0

私はヘッダーをクリックすると、このレイアウトの膨張が発生します。 – Mes

関連する問題