【问题标题】:Adding a footer view in RECYCLER VIEW?在回收站视图中添加页脚视图?
【发布时间】:2015-06-01 09:36:58
【问题描述】:

我想在回收站视图的底部添加一个页脚布局。下面是我的适配器视图,它扩展了页眉布局以及其他项目。感谢帮助!

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

【问题讨论】:

    标签: android android-adapter android-recyclerview


    【解决方案1】:

    类似于添加页眉添加页脚。

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

    【讨论】:

    • 如何从适配器类外部的代码中调用它?就像在 ListView 的情况下,我们调用 lv.removeFooterView(loadMoreView);和 lv.addFooterView(loadMoreView);
    • 只需将此适配器设置为 RecyclerView,然后此适配器将负责添加页眉和页脚。它可以通过使用 getItemViewType(int position) 来区分页眉和页脚。 @erdomester
    【解决方案2】:

    我使用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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多