国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ExpandableRecyclerView使用方法詳解

2019-10-22 18:30:15
字體:
來源:轉載
供稿:網友

 本文為大家分享了Android ExpandableRecyclerView的使用,供大家參考,具體內容如下

1.目前只支持兩級結構。
2.支持所有組同時全部展開,支持同一時間只能展開一組。
3.GroupView,ChildView高度自定義。
4.支持初始化數據時,指定展開某組數據。
5.支持GroupItem,ChildItem的Onlick,OnLongClick事件。
6.展開收起帶動畫。

效果圖:

Android,ExpandableRecyclerView

使用步驟:加入依賴

compile 'com.drawthink:expandable-recyclerview:0.0.3'

1.繼承BaseViewHolder,實現自己的ViewHolder

1.1 在構造函數中初始化你的View(包括GroupView,和childView).

1.2 分別實現以下兩個方法,并在對應方法中返回對應Layout布局文件中根節點的ID。

public int getGroupViewResId()public int getChildViewResId()

示例代碼:

public class ImageViewHolder extends BaseViewHolder {  public ImageView image;  public TextView tvTitle;  /**   * 初始化你的View(這里包括GroupView,和childView)   */  public ImageViewHolder(Context ctx, View itemView, int viewType) {    super(ctx,itemView, viewType);    image = (ImageView) itemView.findViewById(R.id.iv_image);    tvTitle = (TextView)itemView.findViewById(R.id.tv_title);  }  /**   * @return 返回你的GroupView 布局文件中根節點的ID   */  @Override  public int getGroupViewResId() {    return R.id.group;  }  /**   * @return 返回你的ChildView 布局文件中根節點的ID   */  @Override  public int getChildViewResId() {    return R.id.child;  }}
2.繼承BaseRecyclerViewAdapter
/** * author:Drawthink * describe: * date: 2017/5/22 * T :group data * S :child data * VH :ViewHolder */public abstract class BaseRecyclerViewAdapter<T,S,VH extends BaseViewHolder> extends RecyclerView.Adapter<VH>

示例Adapter代碼:

public class ImageAdapter extends BaseRecyclerViewAdapter<String,ImageBean,ImageViewHolder> {  private Context ctx;  private List datas;  private LayoutInflater mInflater;  public ImageAdapter(Context ctx, List<RecyclerViewData> datas) {    super(ctx, datas);    mInflater = LayoutInflater.from(ctx);    this.ctx = ctx;    this.datas = datas;  }  @Override  public void onBindGroupHolder(ImageViewHolder holder, int groupPos,int position, String groupData) {    holder.tvTitle.setText(groupData);  }  @Override  public void onBindChildpHolder(ImageViewHolder holder, int groupPos,int childPos,int position, ImageBean childData) {    holder.image.setBackgroundResource(childData.getResId());  }  @Override  public View getGroupView(ViewGroup parent) {    return mInflater.inflate(R.layout.title_item_layout,parent,false);  }  @Override  public View getChildView(ViewGroup parent) {    return mInflater.inflate(R.layout.item_image_layout,parent,false);  }  @Override  public ImageViewHolder createRealViewHolder(Context ctx, View view, int viewType) {    return new ImageViewHolder(ctx,view,viewType);  }}

完成以上兩步之后,基本大工告成,由于ExpandableRecyclerView的數據是要分組的,所以提供了RecyclerViewData來封裝

/**   * @param groupData   * @param childDatas   * @param isExpand  初始化展示數據時,該組數據是否展開   */public RecyclerViewData(T groupData, List<S> childDatas,boolean isExpand)

那接下來看下數據具體是怎樣封裝的。

    mDatas = new ArrayList<>();    List<ImageBean> bean1 = new ArrayList<>();    List<ImageBean> bean2 = new ArrayList<>();    List<ImageBean> bean3 = new ArrayList<>();    // 每個子列表長度可以不相同    bean1.add(new ImageBean("Dog", R.mipmap.dog));    bean1.add(new ImageBean("Dog", R.mipmap.dog));    bean2.add(new ImageBean("Cat", R.mipmap.cat));    bean3.add(new ImageBean("Bird", R.mipmap.bird));    mDatas.add(new RecyclerViewData("Dog", bean1, true));    mDatas.add(new RecyclerViewData("Cat", bean2, true));    mDatas.add(new RecyclerViewData("Bird", bean3, true));

所有工作以完成,現在你可以象平常使用Adapter,RecyclerView一樣,來愉快的寫代碼了。

注意:在對元數據mDatas進行增刪操作時,要調用adapter.notifyRecyclerViewData();否則會造成數據索引錯亂的問題。

代碼github地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴林右旗| 承德县| 阿图什市| 遂昌县| 泸州市| 永安市| 正定县| 邢台县| 绥中县| 宁明县| 健康| 陇西县| 镇江市| 临泉县| 翁源县| 普宁市| 含山县| 屯门区| 大新县| 申扎县| 青岛市| 临城县| 宁安市| 宝兴县| 赞皇县| 林西县| 太仓市| 沙坪坝区| 图木舒克市| 专栏| 秦皇岛市| 柳林县| 边坝县| 云和县| 家居| 大田县| 新干县| 万山特区| 应城市| 西安市| 芮城县|