在项目开发过程中,经常需要在多个界面实现左滑删除功能,并且未来可能会在列表项中增加更多功能。尽管网上有很多左滑删除的示例代码,但大多数封装不够彻底。因此,我们决定自己封装一个更加灵活和通用的解决方案。
该方案实现了上下两层互不干扰的效果,能够满足不同列表项的左滑需求。底部功能项(如删除、收藏等)可以动态添加。
### 独立Adapter的操作方式
**思路**:通过反射创建ViewHolder,并确保数据操作通过回调函数传递给Activity处理。
public RCommonSlideAdapter(Object object, List datas, int layoutId, Class clazz, SlideItemHolder handle) {
// 在onCreateViewHolder中通过反射创建holder
Constructor constructor2 = mClazz.getConstructor(View.class);
holder = constructor2.newInstance(v);
}
### 上下分层实现
**思路**:创建底部XML布局,然后通过addView将顶部视图插入,并由Activity处理。底部布局则在Adapter中处理。
Constructor cOnstructor= ViewHolderClass.SlideViewHolder.class.getConstructor(View.class);
holder = constructor.newInstance(v);
View cOntentView= View.inflate(parent.getContext(), mLayoutId, null);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
((ViewHolderClass.SlideViewHolder) holder).mRlSlidContent.addView(contentView, params);
((ViewHolderClass.SlideViewHolder) holder).mRlSlidContent.getLayoutParams().width = getScreenWidth(parent.getContext());
### 独立功能项实现
**思路**:在XML布局中不断添加新的功能项,并在回调函数中对每个按钮进行处理,支持动态添加。
### ViewHolder类
public class ViewHolderClass {
public static class SlideViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.sliding_delete)
public ImageView btn_Delete;
@BindView(R.id.rlSlidContent)
public RelativeLayout mRlSlidContent;
@BindView(R.id.linSlideTitle)
public LinearLayout mLinSlideTitle;
@BindView(R.id.tvSlideTitle)
public TextView mTvSlideTitle;
public SlideViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
public static class ShopCarViewHolder extends SlideViewHolder {
@BindView(R.id.itemTv)
public TextView mItemTv;
public ShopCarViewHolder(View view) {
super(view);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家提出宝贵意见。