Reputation: 13
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
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
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