/**
* 展开一个组
*
* @param groupPosition
*/
public void expandGroup(int groupPosition) {
expandGroup(groupPosition, false);
}
/**
* 展开一个组
*
* @param groupPosition
* @param animate
*/
public void expandGroup(int groupPosition, boolean animate) {
GroupEntity entity = mGroups.get(groupPosition);
entity.setExpand(true);
if (animate) {
notifyChildrenInserted(groupPosition);
} else {
notifyDataChanged();
}
}
/**
* 收起一个组
*
* @param groupPosition
*/
public void collapseGroup(int groupPosition) {
collapseGroup(groupPosition, false);
}
/**
* 收起一个组
*
* @param groupPosition
* @param animate
*/
public void collapseGroup(int groupPosition, boolean animate) {
GroupEntity entity = mGroups.get(groupPosition);
entity.setExpand(false);
if (animate) {
notifyChildrenRemoved(groupPosition);
} else {
notifyDataChanged();
}
}
/**
* 收起所有的组
*/
public void collapseGroup() {
for (int i=0 ; i<mGroups.size() ; i++){
GroupEntity entity = mGroups.get(i);
entity.setExpand(false);
}
notifyDataChanged();
}
```
private List<GroupEntity> mGroups;
public GroupedSecondAdapter(Context context, List<GroupEntity> groups) {
super(context);
mGroups = groups;
}
@Override
public int getGroupCount() {
return mGroups == null ? 0 : mGroups.size();
}
@Override
public int getChildrenCount(int groupPosition) {
if (mGroups!=null){
ArrayList<ChildEntity> children = mGroups.get(groupPosition).getChildren();
return children == null ? 0 : children.size();
}
return 0;
}
@Override
public boolean hasHeader(int groupPosition) {
return true;
}
@Override
public boolean hasFooter(int groupPosition) {
return true;
}
@Override
public int getHeaderLayout(int viewType) {
return R.layout.item_text_header;
}
@Override
public int getFooterLayout(int viewType) {
return R.layout.item_text_footer;
}
@Override
public int getChildLayout(int viewType) {
return R.layout.item_content_view;
}
@Override
public void onBindHeaderViewHolder(GroupViewHolder holder, int groupPosition) {
}
@Override
public void onBindFooterViewHolder(GroupViewHolder holder, int groupPosition) {
}
@Override
public void onBindChildViewHolder(GroupViewHolder holder, int groupPosition, int childPosition) {
}
}
```
@Override
public boolean hasFooter(int groupPosition) {
return true;
}
```
public void setData(List<HomePageEntry> data) {
mData = data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType){
case TYPE_HEADER:
return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.home_ad_item_layout,null));
case TYPE_FOOTER:
return new FooterViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.home_text_item_layout,null));
case TYPE_CHILD:
return new ChildViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.home_image_item_layout,null));
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int type = getItemViewType(position);
switch (type){
case TYPE_HEADER:
// TYPE_HEADER 逻辑处理
break;
case TYPE_FOOTER:
// TYPE_FOOTER 逻辑处理
break;
case TYPE_CHILD:
// TYPE_CHILD 逻辑处理
break;
}
}
@Override
public int getItemViewType(int position) {
return mData.get(position).type;//type 的值为TYPE_HEADER,TYPE_FOOTER,TYPE_AD,等其中一个
}
@Override
public int getItemCount() {
return mData == null ? 0:mData.size();
}
public static class HeaderViewHolder extends RecyclerView.ViewHolder{
public HeaderViewHolder(View itemView) {
super(itemView);
//绑定控件
}
}
//省略部分代码
}
```
/**
* 判断item的type 头部 尾部 和 子项
*
* @param position
* @return
*/
public int judgeType(int position) {
int itemCount = 0;
//获取组的数量
int groupCount = mStructures.size();
for (int i = 0; i < groupCount; i++) {
GroupStructure structure = mStructures.get(i);
//判断是否有header头部view
if (structure.hasHeader()) {
itemCount += 1;
if (position < itemCount) {
return TYPE_HEADER;
}
}
//获取孩子的数量
itemCount += structure.getChildrenCount();
if (position < itemCount) {
return TYPE_CHILD;
}
//判断是否有footer数量
if (structure.hasFooter()) {
itemCount += 1;
if (position < itemCount) {
return TYPE_FOOTER;
}
}
}
//以防万一,为了避免在插入刷新,移除刷新时,避免索引越界异常,不要throw异常
//即使当 position == getItemCount() 为true时,可以用空页面替代
return TYPE_NO;
//throw new IndexOutOfBoundsException("can't determine the item type of the position." +
// "position = " + position + ",item count = " + getItemCount());
}
//省略部分代码,具体可以看lib中源代码
```
private int getLayoutId(int position, int viewType) {
int type = judgeType(position);
if (type == TYPE_HEADER) {
return getHeaderLayout(viewType);
} else if (type == TYPE_FOOTER) {
return getFooterLayout(viewType);
} else if (type == TYPE_CHILD) {
return getChildLayout(viewType);
}
return 0;
}
```
Copyright 2017 yangchong211(github.com/yangchong211)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。