2015-09-25 2 views
0

Я реализовал recyclerView. Как добавить нижний колонтитул progressBar в нижней части моего recyclerView с моим существующим кодом. Я знаю, что то же самое может быть достигнуто в listview с помощью метода addFooterView (View v). Как я могу добиться того же в этом существующем коде. на примерах вроде - Android 5.0 - Add header/footer to a RecyclerView в Интернете, но не понял их правильно и процедуру, чтобы использовать его с моим существующим кодом. Я ищу более простое объяснение. Я хочу достичь этой функциональности в моем существующем коде. Пожалуйста, отредактируйте ее и скажите, какие изменения необходимо внести.FooterView to recyclerView

Мой адаптер

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostHandler> { 

private LayoutInflater inflater; 
Context context; 

public PostAdapter(Context con) { 
    context = con; 
    inflater = LayoutInflater.from(context); 
} 

@Override 
public PostHandler onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = inflater.inflate(R.layout.post_row, parent, false); 
    PostHandler postHandler = new PostHandler(v); 
    return postHandler; 
} 

@Override 
public void onBindViewHolder(final PostHandler holder, final int position) { 
    //The bind actions set text and others happen here... 
} 

@Override 
public int getItemCount() { 
    return FreshPostContainer.getInstance().getPosts().size(); 
} 

class PostHandler extends RecyclerView.ViewHolder { 

    SimpleDraweeView mprofilePic; 
    TextView mpostAuthor; 
    ; 

    public PostHandler(View itemView) { 
     super(itemView); 
     mprofilePic = (SimpleDraweeView) itemView.findViewById(R.id.post_profilePic); 
     mpostAuthor = (TextView) itemView.findViewById(R.id.post_authorName);   
    } 
} 

} 

MyEndless скроллер

public abstract class EndlessOnScrollRecycler extends RecyclerView.OnScrollListener { 

boolean mloading; 
private final int AUTO_LOAD_THRESHOLD = 5; 
private LinearLayoutManager mlinearLayoutManager; 
int firstVisibleItem, visibleItemCount, totalItemCount; 

public EndlessOnScrollRecycler(LinearLayoutManager linearLayoutManager) { 
    this.mlinearLayoutManager = linearLayoutManager; 
} 

public void setLoading(boolean loading) { 
    this.mloading = loading; 
} 

@Override 
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
    super.onScrolled(recyclerView, dx, dy); 
    visibleItemCount = recyclerView.getChildCount(); 
    totalItemCount = mlinearLayoutManager.getItemCount(); 
    firstVisibleItem = mlinearLayoutManager.findLastVisibleItemPosition(); 
    if (!mloading) { 
     if (totalItemCount - AUTO_LOAD_THRESHOLD <= firstVisibleItem + visibleItemCount) { 
      loading(); 
      setLoading(true); 
     } 
    } 
} 

protected abstract void loading(); 

} 
+0

Возможный дубликат [Android 5.0 - Добавить заголовок/нижний колонтитул в RecyclerView] (http://stackoverflow.com/questions/26448717/android-5-0-add-header-footer-to-a-recyclerview) – Rami

+0

@Rami Я прошел этот пример и не понял его и процедуру его использования с моим существующим кодом. Я ищу гораздо более простое объяснение, которое поместило бы код, который я уже использовал в своем проекте. –

ответ

0

Вы можете переопределить getItemViewType():

@Override 
public int getItemViewType(int position) { 
    // you can define your view type as your requirement 

    return super.getItemViewType(position); 
} 

@Override 
public PostHandler onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = inflater.inflate(R.layout.post_row, parent, false); 
    if(viewType == yourviewtype) // inflate your layout accordingly 
    PostHandler postHandler = new PostHandler(v); 
    return postHandler; 
} 

и обновить posthander конструктор:

 public PostHandler(View itemView, int viewType) { 
      super(itemView); 
      if(viewType == yourrequiredview) { 

      }else { 
       mprofilePic = (SimpleDraweeView) itemView.findViewById(R.id.post_profilePic); 
       mpostAuthor = (TextView) itemView.findViewById(R.id.post_authorName); 
      } 
    } 
    //final adapter class is as 

    public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostHandler> { 

     private LayoutInflater inflater; 
     Context context; 

     public PostAdapter(Context con) { 
      context = con; 
      inflater = LayoutInflater.from(con); 
     } 

     @Override 
     public PostHandler onCreateViewHolder(ViewGroup parent, int viewType) { 
      View v; 
      if(viewType == 2){ 
       v = inflater.inflate(R.layout.post_row, parent, false); 
      }else{ 
       v = inflater.inflate(R.layout.progressbar_layout, parent, false); 
      } 


      PostHandler postHandler = new PostHandler(v, viewType); 

      return postHandler; 
     } 

     @Override 
     public void onBindViewHolder(final PostHandler holder, final int position) 
     {if (getItemViewType(position)==2) 
       {   //The bind actions set text and others happen here... 

     } 
     } 

     @Override 
     public int getItemCount() { 
      return FreshPostContainer.getInstance().getPosts().size(); 
     } 

     class PostHandler extends RecyclerView.ViewHolder { 

      SimpleDraweeView mprofilePic; 
      TextView mpostAuthor; 
      ProgressBar mProgressBar; 
      ; 

      public PostHandler(View itemView) { 
       super(itemView); 
       mprofilePic = (SimpleDraweeView) itemView.findViewById(R.id.post_profilePic); 
       mpostAuthor = (TextView) itemView.findViewById(R.id.post_authorName); 
      } 
      public PostHandler(View itemView, int viewType) { 
       super(itemView); 
       if(viewType == 2) { 
        mprofilePic = (SimpleDraweeView) itemView.findViewById(R.id.post_profilePic); 
        mpostAuthor = (TextView) itemView.findViewById(R.id.post_authorName); 
       }else { 
        mProgressBar = (ProgressBar) itemView.findViewById(R.id.progressbar); 
       } 
      } 
     } 

     @Override 
     public int getItemViewType(int position) { 
      if(position == (getItemCount()-1)){ 
       return 1; 
      }else { 
       return 2; 
      } 
     } 
    } 
+0

Спасибо за ответ. Но я не получил реализацию правильно. Я не получаю getItemViewType() и onCreateViewHolder() и как раздувать представления здесь. Предположим, что индикатор выполнения похож - progessBar = (ProgressBar) itemview.findViewById (...); где я, я полагаю, надуть. Пожалуйста, предоставьте мне полный код с переменной progressbar. Спасибо за ответ. –

+0

если мой ответ вам поможет, пожалуйста, отметьте его принятым – USKMobility

+0

@ USKMobility Спасибо, что он сработал с некоторыми изменениями. Изменения, которые я сделал '@Override public void onBindViewHolder (конечный держатель PostHandler, конечная позиция int) { if (getItemViewType (position) == 2) {// Здесь перечислены действия, связанные с привязкой, и другие события ...}} '. Я отредактировал ваш ответ в соответствии с изменениями, иначе я получал исключение nullpointer. –

Смежные вопросы