Last active
June 26, 2018 06:22
-
-
Save ec84b4/d56c00fb5fd2dfaf279b to your computer and use it in GitHub Desktop.
recycler view header adapter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.support.v7.widget.RecyclerView; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.Button; | |
import android.widget.TextView; | |
/** | |
* Created by khaled bakhtiari on 10/26/2014. | |
* <a href="http://about.me/kh.bakhtiari"> | |
*/ | |
public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |
private static final int TYPE_HEADER = 0; | |
private static final int TYPE_ITEM = 1; | |
String[] data; | |
public HeaderAdapter(String[] data) { | |
this.data = data; | |
} | |
@Override | |
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
if (viewType == TYPE_ITEM) { | |
//inflate your layout and pass it to view holder | |
return new VHItem(null); | |
} else if (viewType == TYPE_HEADER) { | |
//inflate your layout and pass it to view holder | |
return new VHHeader(null); | |
} | |
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly"); | |
} | |
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { | |
if (holder instanceof VHItem) { | |
String dataItem = getItem(position); | |
//cast holder to VHItem and set data | |
} else if (holder instanceof VHHeader) { | |
//cast holder to VHHeader and set data for header. | |
} | |
} | |
@Override | |
public int getItemCount() { | |
return data.length + 1; | |
} | |
@Override | |
public int getItemViewType(int position) { | |
if (isPositionHeader(position)) | |
return TYPE_HEADER; | |
return TYPE_ITEM; | |
} | |
private boolean isPositionHeader(int position) { | |
return position == 0; | |
} | |
private String getItem(int position) { | |
return data[position - 1]; | |
} | |
class VHItem extends RecyclerView.ViewHolder { | |
TextView title; | |
public VHItem(View itemView) { | |
super(itemView); | |
} | |
} | |
class VHHeader extends RecyclerView.ViewHolder { | |
Button button; | |
public VHHeader(View itemView) { | |
super(itemView); | |
} | |
} | |
} |
@mmanishh you could easily send a flag to show the footer or not
or you could have a inheritance of the adapter that doesn't show the footer of course you'd need to tweak the code a bit
The first item for Recyclerview is not displayed . Can u tell why ? and the solution too
How can we implement this with multiple Headers?
Is there a way we can add Accordion behavior to this ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@rafiqlightwala i've had the same problem what i did to solve the issue was to set visibility to gone on every child of the footer (i had a refresh progressbar as well, with a textview and a button)