0

I am using the accepted answer from this question Is there an addHeaderView equivalent for RecyclerView? to add footer to my RecyclerView Adapter but it seems not to be working.

I have ten items in the RecyclerView but the footer only appears after the first item and replaces the remaining nine items of the RecyclerView ie one Item of the RecyclerView appears and the remaining nines item are replaced with nine footer items. But it is supposed to be one footer item below ten RecyclerView items. Hope you get me?

My Adapter

public class VideoAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    private ImageLoader imageLoader;
    private Context mContext;

    //List of videos
    private List<VideoItems> mVideoItems;

    private final int VIEW_ITEM = 0;
    private final int VIEW_PROG = 1;

   public VideoAdapter(List<VideoItems> videoItems, Context context) {
       super();

       //Getting all videos
       this.mVideoItems = videoItems;
       this.mContext = context;
   }

    @Override
    public int getItemViewType(int position) {
        if (isPositionItem(position))
            return VIEW_ITEM;
        return VIEW_PROG;
    }

    private boolean isPositionItem(int position) {
       return position == 0;
    }



    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder (ViewGroup parent, int viewType) {
        if (viewType == VIEW_ITEM) {
            View v =  LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.video_summ, parent, false);
            return new VideoViewHolder(v);
        } else if (viewType == VIEW_PROG){
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyclerfooter, parent, false);
            return new ProgressViewHolder(v);
        }

        return null;
    }



    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof VideoViewHolder) {
            VideoItems videoList = mVideoItems.get(position);
            imageLoader = VolleyRequest.getInstance(mContext).getImageLoader();
            imageLoader.get(videoList.getVideo_image(), ImageLoader.getImageListener(((VideoViewHolder) holder).videoImage, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));

            ((VideoViewHolder) holder).videoImage.setImageUrl(videoList.getVideo_image(), imageLoader);
            ((VideoViewHolder) holder).videoTitle.setText(videoList.getVideo_title());
            ((VideoViewHolder) holder).videoBody.setText(videoList.getVideo_body());
            ((VideoViewHolder) holder).videoAuthor.setText(videoList.getVideo_author());
            ((VideoViewHolder) holder).videoDate.setText(videoList.getVideo_date());

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
            ((ProgressViewHolder) holder).loadButton.setText(R.string.reload);
        }


    }


    @Override
    public int getItemCount(){
        //Return the number of items in the data set
        return mVideoItems.size();
    }



    public static class VideoViewHolder extends RecyclerView.ViewHolder{
        public NetworkImageView videoImage;
        public TextView videoTitle, videoAuthor, videoDate, videoBody;
        public ImageButton imageButton;

        VideoViewHolder (View videoView) {
            super(videoView);
            videoImage = (NetworkImageView) videoView.findViewById(R.id.video_image);
            videoTitle = (TextView) videoView.findViewById(R.id.video_title);
            videoBody = (TextView) videoView.findViewById(R.id.video_body);
            videoAuthor = (TextView) videoView.findViewById(R.id.video_author);
            videoDate = (TextView) videoView.findViewById(R.id.video_date);
            imageButton = (ImageButton) videoView.findViewById(R.id.arrow_button);



        }
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder {
        Button loadButton;
        ProgressBar progressBar;

        public ProgressViewHolder(View footerView){
            super(footerView);
            loadButton = (Button) footerView.findViewById(R.id.reload_button);
            progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load);
        }
    }


}

Any Idea what I'm getting wrong and how to fix it?

Note I'm fetching my items from JSON using volley.

Community
  • 1
  • 1
X09
  • 3,827
  • 10
  • 47
  • 92

1 Answers1

2
private boolean isPositionItem(int position) {
       return position == 0;
    }

This method will return true only for the first item. So only all other items are footer in your recycler view. Because for Header view they choose the first position to change the view as Header. For the Footer View you have to change the view of the last position.

Change the above method as

private boolean isPositionItem(int position) {
           return position != getItemCount()-1; // last position
        }

Now you will be able to get only one footer view in the last position.

Stephenraj
  • 761
  • 9
  • 17