2016-04-10 1 views
0

Я использую принятый ответ из этого вопроса Is there an addHeaderView equivalent for RecyclerView?, чтобы добавить нижний колонтитул к моему адаптеру RecyclerView, но, похоже, он не работает.Как добавить нижний колонтитул для этого адаптера RecyclerView

У меня есть десять элементов в RecyclerView, но нижний колонтитул появляется только после первого элемента и заменяет оставшиеся девять элементов RecyclerView, т. Е. Появляется один элемент RecyclerView, а оставшийся девятый элемент заменяется на девять элементов нижнего колонтитула. Но он должен быть одним элементом нижнего колонтитула ниже десяти элементов RecyclerView. Надеюсь, ты меня поймаешь?

Мой адаптер

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


} 

Любая идея, что я получаю не так и как это исправить?

Примечание Я извлекаю свои предметы из JSON, используя залп.

+0

Убедитесь, что у вас есть правильные элементы внутри mVideoItems. –

+0

Проверьте это http://www.gadgetsaint.com/android/recyclerview-header-footer-pagination/ – ASP

ответ

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

Этот метод вернет true только для первого элемента. Таким образом, только все другие элементы являются нижними колонтитулами в вашем просмотре ресайклеров. Потому что для Вид заголовка они выбирают первую позицию для изменения вида в виде заголовка. Для Footer View вам необходимо изменить вид последней позиции.

Изменение выше метод как

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

Теперь вы сможете получить только один вид колонтитула в последней позиции.

+1

Спасибо, это исправлено! – X09