0

I'm using a recyclerView which uses two types of Views : one is a HeaderView and is at the first place of the list ( position == 0 ) and the second is the CommentView.

What I want is onclick() to remove the HeaderView and replace it with another xml layout file I already have created.

Is it something I have to do inside the Adapter class ? I'm trying like this :

    @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);

            }
        });

I can set the visibility to GONE but I don't see how I can inflate the layout .

Mes
  • 1,671
  • 3
  • 20
  • 36

2 Answers2

0

Could something like this help you?

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;
    }
}
malmling
  • 2,398
  • 4
  • 19
  • 33
0

Try this, assumed two layouts.

@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);
        }
    }

Like this you want ??

@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);
}
Nisarg
  • 1,358
  • 14
  • 30