tutorial studio recyclerview make how create card and android android-adapter android-recyclerview recycler-adapter

studio - recyclerview android kotlin



¿Cómo agregar una vista de pie de página en RECYCLER VIEW? (2)

Similar a agregar el encabezado agrega el pie de página también.

public class SplitMembersAdapter extends RecyclerViewAdapter<SplitMember, SplitMemberViewHolder> { private final ArrayList<SplitMember> mSplitMembersList; private final ImageLoader mImageLoader; private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private static final int TYPE_FOOTER = 2; private int splitAmount; private boolean isAmountSplitted; public SplitMembersAdapter(ArrayList<SplitMember> members,ImageLoader imageLoader) { mSplitMembersList = members; mImageLoader = imageLoader; } @Override public int getItemCount() { return mSplitMembersList.size(); } @Override public int getItemViewType(int position) { if (isPositionHeader(position)) { return TYPE_HEADER; }ELSE if (isPositionFooter(position)) { return TYPE_Footer; } return TYPE_ITEM; } private static boolean isPositionHeader(int position) { return position == 0; } private static boolean isPositionFooter(int position) { return position == mSplitMembersList.size()-1; } @Override public SplitMemberViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { switch(viewType){ case TYPE_HEADER: //return header view holder; break; case TYPE_ITEM: //return item view holder; break; case TYPE_FOOTER: //return footer view holder; break; } } @Override public void onBindViewHolder(SplitMemberViewHolder viewHolder, int position) { switch(getItemViewType(position)){ case TYPE_HEADER: //bind header data; break; case TYPE_ITEM: //bind item data break; case TYPE_FOOTER: //bind footer data. break; } } } class SplitMemberViewHolder extends RecyclerView.ViewHolder { public BezelImageView splitMemImg; public TextView splitMemName; public TextView splitMemAmount; public View splitMemberColor; public SplitMemberViewHolder(View itemView) { super(itemView); splitMemberColor = itemView.findViewById(R.id.member_color); splitMemImg = (BezelImageView) itemView.findViewById(R.id.member_profile_image); splitMemName = (TextView) itemView.findViewById(R.id.member_name); splitMemAmount = (TextView) itemView.findViewById(R.id.member_amount); } }

Quiero agregar un diseño de pie de página en la base de la vista del reciclador. A continuación, se muestra la vista de mi adaptador que aumenta el diseño del encabezado, así como otros elementos también. ¡Apreciado!

public class SplitMembersAdapter extends RecyclerViewAdapter<SplitMember, SplitMemberViewHolder> { private final ArrayList<SplitMember> mSplitMembersList; private final ImageLoader mImageLoader; private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private int splitAmount; private boolean isAmountSplitted; public SplitMembersAdapter(ArrayList<SplitMember> members,ImageLoader imageLoader) { mSplitMembersList = members; mImageLoader = imageLoader; } @Override public int getItemCount() { return mSplitMembersList.size(); } @Override public int getItemViewType(int position) { if (isPositionHeader(position)) { return TYPE_HEADER; } return TYPE_ITEM; } private static boolean isPositionHeader(int position) { return position == 0; } @Override public SplitMemberViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(R.layout.split_member_item_layout, viewGroup, false); return new SplitMemberViewHolder(itemView); } @Override public void onBindViewHolder(SplitMemberViewHolder viewHolder, int position) { SplitMember contact = mSplitMembersList.get(position); viewHolder.splitMemAmount.setText(String.format("%.2f", contact.getShare())); viewHolder.splitMemberColor.setBackgroundColor(contact.getColor()); if (position == TYPE_HEADER){ viewHolder.splitMemName.setText("You"); mImageLoader.loadImage(contact.getImg(), viewHolder.splitMemImg, R.drawable.empty_user_placeholder); } else { viewHolder.splitMemName.setText(contact.getName()); mImageLoader.loadImage(Utils.getProfileImageUrl(contact.getImg()), viewHolder.splitMemImg,R.drawable.empty_user_placeholder); } } } class SplitMemberViewHolder extends RecyclerView.ViewHolder { public BezelImageView splitMemImg; public TextView splitMemName; public TextView splitMemAmount; public View splitMemberColor; public SplitMemberViewHolder(View itemView) { super(itemView); splitMemberColor = itemView.findViewById(R.id.member_color); splitMemImg = (BezelImageView) itemView.findViewById(R.id.member_profile_image); splitMemName = (TextView) itemView.findViewById(R.id.member_name); splitMemAmount = (TextView) itemView.findViewById(R.id.member_amount); } }


Creé una envoltura alrededor de mi adaptador utilizando esta idea . Y después de eso, puedo incluir mi propio diseño y mi marcador de mi encabezado y pie de página, así como el resto de los elementos.

public class SplitMembersAdapter extends HeaderFooterRecyclerViewAdapter implements AutoCompleteContactTextView.ContactSelectListener{ private final ArrayList<SplitMember> mSplitMembersList; private final ImageLoader mImageLoader; private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private static final int TYPE_FOOTER = 2; private int splitAmount; private boolean isAmountSplitted; public SplitMembersAdapter(ArrayList<SplitMember> members, ImageLoader imageLoader) { mSplitMembersList = members; mImageLoader = imageLoader; } @Override public boolean useFooter() { return true; } @Override public RecyclerView.ViewHolder onCreateFooterViewHolder(ViewGroup viewGroup, int viewType) { View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(R.layout.split_member_footer_layout, viewGroup, false); return new SplitMemberFooterViewHolder(itemView); } //Binding data wrt to footer @Override public void onBindFooterView(final RecyclerView.ViewHolder holder, int position) { if (holder instanceof SplitMemberFooterViewHolder){ ((SplitMemberFooterViewHolder) holder).mAddFriends.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((SplitMemberFooterViewHolder) holder).mAddFriendPlaceholderTxt.setVisibility(View.GONE); ((SplitMemberFooterViewHolder) holder).mAddFriends.setVisibility(View.GONE); ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setVisibility(View.VISIBLE); } }); ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setmContactSelectListener(this); ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setDisplayPhoto(true); ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setCursorVisible(true); } }); ((SplitMemberFooterViewHolder) holder).mPhoneEnterView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: postContact(((SplitMemberFooterViewHolder) holder) .mPhoneEnterView.getText().toString()); return true; default: break; } } return false; } }); } } @Override public void onContactSelect(People contact) { String mobileNum = String.valueOf(contact.getData()); postContact(mobileNum); } private static void postContact(String contact) { EventBus.getDefault().post(new Events(Events.GET_CONTACT, true, contact)); } @Override public RecyclerView.ViewHolder onCreateBasicItemViewHolder(ViewGroup viewGroup, int viewType) { View itemView = LayoutInflater.from(viewGroup.getContext()). inflate(R.layout.split_member_item_layout, viewGroup, false); return new SplitMemberViewHolder(itemView); } //Binding data wrt the items @Override public void onBindBasicItemView(RecyclerView.ViewHolder holder, int position) { SplitMember contact = mSplitMembersList.get(position); if (holder instanceof SplitMemberViewHolder){ ((SplitMemberViewHolder) holder).splitMemAmount.setText(String.format("%.2f", contact.getShare())); ((SplitMemberViewHolder) holder).splitMemberColor.setBackgroundColor(contact.getColor()); if (position == TYPE_HEADER) { ((SplitMemberViewHolder) holder).splitMemName.setText("You"); mImageLoader.loadImage(contact.getImg(), ((SplitMemberViewHolder) holder).splitMemImg, R.drawable.empty_user_placeholder); } else { ((SplitMemberViewHolder) holder).splitMemName.setText(contact.getName()); mImageLoader.loadImage(Utils.getProfileImageUrl(contact.getImg()), ((SplitMemberViewHolder) holder).splitMemImg, R.drawable.empty_user_placeholder); } } } @Override public int getBasicItemCount() { return mSplitMembersList.size(); } @Override public int getBasicItemType(int position) { return position; } } //Seperate viewholders for different footer as well as items class SplitMemberViewHolder extends RecyclerView.ViewHolder { public BezelImageView splitMemImg; public TextView splitMemName; public TextView splitMemAmount; public View splitMemberColor; public SplitMemberViewHolder(View itemView) { super(itemView); splitMemberColor = itemView.findViewById(R.id.member_color); splitMemImg = (BezelImageView) itemView.findViewById(R.id.member_profile_image); splitMemName = (TextView) itemView.findViewById(R.id.member_name); splitMemAmount = (TextView) itemView.findViewById(R.id.member_amount); } }class SplitMemberFooterViewHolder extends RecyclerView.ViewHolder { public BezelImageView mAddFriends; public AutoCompleteContactTextView mPhoneEnterView; public TextView mAddFriendPlaceholderTxt; public SplitMemberFooterViewHolder(View itemView) { super(itemView); mAddFriends = (BezelImageView) itemView.findViewById(R.id.add_friends_img); mPhoneEnterView = (AutoCompleteContactTextView) itemView.findViewById(R.id.add_member_edit_text); mAddFriendPlaceholderTxt = (TextView) itemView.findViewById(R.id.add_friend_static_txt); } }