
好了,我们知道如果在ListView中要添加不同的布局的item,都是通过重写getItemViewType()和getViewTypeCount()这两个方法来控制的,OK,对于RecyclerView,还是用这个方法来做,分别对不同的Item用不同的flag标记,然后在创建和绑定数据时候分别对不同的flag对应不同的处理,直接上代码(这里我添加了header和footer):
RecyclerView.Adapter
publicclassRecyclerViewAdapterextendsRecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder>{private List<String>datas
privatestaticfinalint IS_HEADER = 2
privatestaticfinalint IS_FOOTER = 3
privatestaticfinalint IS_NORMAL = 1
publicRecyclerViewAdapter(List<String>datas) {
this.datas = datas
}
@Overridepublic RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerViewHolder holder
//对不同的flag创建不同的Holderif (viewType == IS_HEADER) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_header, viewGroup, false)
holder = new RecyclerViewHolder(view,IS_HEADER)
return holder
} elseif (viewType == IS_FOOTER) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_footer, viewGroup, false)
holder = new RecyclerViewHolder(view,IS_FOOTER)
return holder
}elseif(viewType==IS_NORMAL){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_item, viewGroup, false)
holder = new RecyclerViewHolder(view,IS_NORMAL)
return holder
}
returnnull
}
@OverridepublicvoidonBindViewHolder(final RecyclerViewHolder recyclerViewHolder, int position) {
//对不同的Item相应不同的 *** 作if(position!=0&&position!=datas.size()+1&&recyclerViewHolder.viewType==IS_NORMAL){
recyclerViewHolder.mTextView.setText(datas.get(position - 1))
}
if(position==0&&recyclerViewHolder.viewType==IS_HEADER){
//header
recyclerViewHolder.mButton.setOnClickListener(new View.OnClickListener() {
int i=0
@OverridepublicvoidonClick(View v) {
recyclerViewHolder.mButton.setText(++i+"")
}
})
}
if(position==datas.size()+1&&recyclerViewHolder.viewType==IS_FOOTER){
//footer
}
}
@OverridepublicintgetItemCount() {
return datas.size() + 2
}
@OverridepublicintgetItemViewType(int position) {
if (position == 0) {
return IS_HEADER
} elseif(position==datas.size()+1){
return IS_FOOTER
}else {
return IS_NORMAL
}
}
class RecyclerViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView
public Button mButton
publicint viewType
publicRecyclerViewHolder(View itemView,int viewType) {
super(itemView)
this.viewType = viewType
if(viewType==IS_HEADER){
mButton = (Button) itemView.findViewById(R.id.button)
}
if(viewType==IS_FOOTER){
//do some sthing
}
if(viewType==IS_NORMAL){
mTextView = (TextView) itemView.findViewById(R.id.tv_content)
}
}
}
}
RecyclerView.ViewHolder
classRecyclerViewHolderextendsRecyclerView.ViewHolder {public TextView mTextView
public Button mButton
publicint viewType
public RecyclerViewHolder(View itemView,int viewType) {
super(itemView)
this.viewType = viewType
if(viewType==IS_HEADER){
mButton = (Button) itemView.findViewById(R.id.button)
}
if(viewType==IS_FOOTER){
//do some sthing
}
if(viewType==IS_NORMAL){
mTextView = (TextView) itemView.findViewById(R.id.tv_content)
}
}
}
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到
android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的
fadingEdgeLength表示阴影部分的高度,requiresFadingEdge表示阴影的方向
android:fastScrollEnabled="true"
是让ListView出现快速滚动的按钮,比较少的item时候不会出现,多了就会出现。不出现原因是数据不多的原因,只要数据足够多,才会自动出现的。
android:footerDividersEnabled="true" 和android:headerDividersEnabled="true”对应。
api说明是:设成flase时,此ListView将不会在页脚或者头部视图 前画分隔符。此属性缺省值为true。
这说明这个属性只对页脚或者头部起作用,如果listview中没有添加页脚这个属性就不起作用。
指示该列表总是在固定的单色、不透明的背景下绘制。这允许列表优化其绘制过程
为真时,列表会使用更精确的基于条目在屏幕上的可见像素高度的计算方法。 默认该属性为真,如果你的适配器需要绘制可变高的条目,他应该设为假。 当该属性为真时,你在适配器在显示变高条目时,滚动条的把手会在滚动的 过程中改变大小。当设为假时,列表只使用适配器中的条目数和屏幕上的 可见条目来决定滚动条的属性
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)