2016-04-10 12 views
0

Ich benutze die akzeptierte Antwort von dieser Frage Is there an addHeaderView equivalent for RecyclerView? Fußzeile zu meinem RecyclerView Adapter hinzufügen, aber es scheint nicht zu funktionieren.Footer für diesen RecyclerView-Adapter hinzufügen

Ich habe zehn Elemente in der RecyclerView, aber die Fußzeile erscheint nur nach dem ersten Element und ersetzt die verbleibenden neun Elemente des RecyclerView dh ein Element der RecyclerView erscheint und die verbleibenden neun Elemente werden durch neun Fußzeilenelemente ersetzt. Aber es sollte ein Fußzeilenelement unter zehn RecyclerView-Elementen sein. Hoffen Sie, dass Sie mich bekommen?

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


} 

Jede Idee, was ich bin immer falsch und wie man es beheben?

Hinweis Ich hole meine Artikel von JSON mit Volley.

+0

Stellen Sie sicher, dass Sie die richtigen Elemente in mVideoItems haben. –

+0

Überprüfen Sie diese http://www.gadgetsaint.com/android/recyclerview-header-footer-pagination/ – ASP

Antwort

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

Diese Methode gibt nur für das erste Element true zurück. Daher sind nur alle anderen Elemente in der Recycleransicht Fußzeile. Denn für Header-Ansicht wählen sie die erste Position, um die Ansicht als Header zu ändern. Für die Fußzeile Ansicht müssen Sie die Ansicht der letzten Position ändern.

das obige Verfahren ändern, wie

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

Jetzt werden Sie in der Lage sein, nur eine Fußzeile Blick in die letzte Position zu bekommen.

+1

Danke, das hat es behoben! – X09