Sandeep
Sandeep

Reputation: 13

How to add multiple view in recycler view in android

I have a recyclerview in which i want to show multiple views in it for which i have already implemented code for recyclerview as well as adpter but i don't know how to proceed further.Pls help

code for activity:-

 private RecyclerView.LayoutManager layoutManager;
private RecyclerView mList;
private Context mContext;
private CMyAdapter adapter;
private String[] list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mContext = MainActivity.this;
    init();
}

private void init() {
    mList = (RecyclerView) findViewById(R.id.dealList);
    layoutManager = new LinearLayoutManager(mContext);
    mList.setLayoutManager(layoutManager);
    mList.setHasFixedSize(true);
    // set divider between items of list
    mList.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL));
    list = getResources().getStringArray(R.array.list);
    adapter = new CMyAdapter(mContext, list);
    mList.setAdapter(adapter);

}

code for adapter:-

 private Context mContext;
private String[] list;

public CMyAdapter(Context context, String[] list) {
    this.mContext = context;
    this.list = list;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view1, parent, false);

    return new ViewHolder0(itemView);
}

@Override
public int getItemViewType(int position) {
    // Just as an example, return 0 or 2 depending on position
    // Note that unlike in ListView adapters, types don't have to be contiguous
    return position % 2 * 2;
}

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

}

@Override
public int getItemCount() {
    return list.length;
}

public class ViewHolder0 extends RecyclerView.ViewHolder {
    public ViewHolder0(View itemView) {
        super(itemView);
    }
}

class ViewHolder2 extends RecyclerView.ViewHolder {

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

    }
}

}

Upvotes: 0

Views: 376

Answers (2)

Sunny Bansal
Sunny Bansal

Reputation: 624

Declaring different ViewHolders as shown below

public class ItemViewHolder extends RecyclerView.ViewHolder {
    public TextView mTitle;
    private LinearLayout mItemView;

    public ItemViewHolder(View itemView) {
        super(itemView);
        mTitle = (TextView) itemView.findViewById(R.id.webview_text);
        mItemView = (LinearLayout) itemView.findViewById(R.id.header_container);


    }
}

public static class ViewHolderHeader extends RecyclerView.ViewHolder {
    public View header;
    public TextView headerTitle;

    public ViewHolderHeader(View itemView) {
        super(itemView);
        header = (View) itemView.findViewById(R.id.list_header_container);
        headerTitle = (TextView) itemView.findViewById(R.id.webview_text);
    }
}

public static class FooterViewHolder extends RecyclerView.ViewHolder {
    public TextView mTitle;
    public LinearLayout mItemView;

    public FooterViewHolder(View itemView) {
        super(itemView);
        mTitle = (TextView) itemView.findViewById(R.id.webview_text);
        mItemView = (LinearLayout) itemView.findViewById(R.id.header_container);
    }
}

And use them like as used below

   @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_HEADER) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.dt_list_header_layout, parent, false);
        return new ViewHolderHeader(v);
    } else if (viewType == TYPE_ITEM) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_search_list, parent, false);
        return new ItemViewHolder(v);
    } else if (viewType == TYPE_FOOTER) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.footer_item_dt, parent, false);
        return new FooterViewHolder(v);
    }
    throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}

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

    if (holder instanceof ItemViewHolder) {
        X.Result result = getItem(position);
        ((ItemViewHolder) holder).mTitle.setText(result.getName());
        ((ItemViewHolder) holder).mTitle.setTypeface(Util.getTondoRegularTypeFace(mContext));
        ((ItemViewHolder) holder).mItemView.setOnClickListener(this);
        ((ItemViewHolder) holder).mItemView.setTag(position);
    } else if (holder instanceof ViewHolderHeader) {
        ((ViewHolderHeader) holder).headerTitle.setText(mTitle);
        ((ViewHolderHeader) holder).headerTitle.setTypeface(Util.getTondoBoldTypeFace(mContext));
        ((ViewHolderHeader) holder).headerTitle.setTextSize(18);
    } else if (holder instanceof FooterViewHolder) {
        ((FooterViewHolder) holder).mTitle.setText("Issue not listed above");
        ((FooterViewHolder) holder).mTitle.setTypeface(Util.getTondoRegularTypeFace(mContext));
        ((FooterViewHolder) holder).mItemView.setTag(position);
    }

}

Upvotes: 1

Nikhil Sharma
Nikhil Sharma

Reputation: 603

You have implemented correct method but first of all you must know how you want to show view inside recyclerview for example follow the below link

http://www.androidhive.info/2016/01/android-working-with-recycler-view/

Upvotes: 0

Related Questions