我想在回收站视图的底部添加一个页脚布局。下面是我的适配器视图,它也会扩展页眉布局以及其他项目。欢迎帮助!
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);
}
}
答案 0 :(得分:5)
与添加标题类似,也添加页脚。
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);
}
}
答案 1 :(得分:4)
我使用this gist在我的适配器周围创建了一个包装器。之后我可以为我的页眉和页脚以及其他项目包含我自己的布局和视图。
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);
}
}