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