溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Android中使用ExpandableRecyclerView

發(fā)布時間:2021-03-30 16:34:47 來源:億速云 閱讀:189 作者:Leah 欄目:移動開發(fā)

怎么在Android中使用ExpandableRecyclerView?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

使用步驟:加入依賴

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

1.繼承BaseViewHolder,實現(xiàn)自己的ViewHolder

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

1.2 分別實現(xiàn)以下兩個方法,并在對應(yīng)方法中返回對應(yīng)Layout布局文件中根節(jié)點的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 布局文件中根節(jié)點的ID
   */
  @Override
  public int getGroupViewResId() {
    return R.id.group;
  }

  /**
   * @return 返回你的ChildView 布局文件中根節(jié)點的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的數(shù)據(jù)是要分組的,所以提供了RecyclerViewData來封裝

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

那接下來看下數(shù)據(jù)具體是怎樣封裝的。

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));

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

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI