2016-04-10 19 views
0

Bu sorudan Is there an addHeaderView equivalent for RecyclerView? kabul edilen yanıtı, RecyclerView Bağdaştırıcım'a altbilgi eklemek için kullanıyorum ancak çalışmıyor gibi görünüyor.Bu RecyclerView Bağdaştırıcısı için Altbilgi Nasıl Eklenir

RecyclerView öğesinde on öğe var ancak alt öğe yalnızca ilk öğeden sonra görünür ve RecyclerView öğesinin kalan dokuz öğesinin yerini alır, yani RecyclerView öğesinin bir Öğesi görünür ve kalan dokuz öğe dokuz alt öğe ile değiştirilir. Ama on RecyclerView öğesinin altında bir alt öğe olması gerekiyordu. Umarım beni alır mısın?

Benim Adaptör

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


} 

Yanlış alma ve nasıl düzeltebilirim ettiğimi Herhangi Fikir?

Not Öğelerimi JSON'dan volley kullanarak getiriyorum.

+0

mVideoItems'in içinde doğru öğelere sahip olduğunuzdan emin olun. –

+0

Bunu kontrol edin http://www.gadgetsaint.com/android/recyclerview-header-footer-pagination/ – ASP

cevap

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

Bu yöntem yalnızca ilk öğe için doğru döner. Bu nedenle, yalnızca diğer tüm öğeler geri dönüşümcü görünümünüzde altbilgidir. Header view için, görünümü Header olarak değiştirmek için ilk konumu seçtikleri için. Altbilgi Görünümü için son konum görünümünü değiştirmeniz gerekir.

Şimdi son pozisyonda tek altbilgi görünüm elde etmek mümkün olacak

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

yukarıdaki yöntemini değiştirme .

+1

Teşekkürler, bu düzeltildi! – X09

İlgili konular