https://github.com/anzaizai/EasySwipeMenuLayout
这个是在看了很多自定义view左滑删除对原代码侵入最小的方式
布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<com.dtrt.preventpro_irontower.view.weiget.swipe.EasySwipeMenuLayout
android:id="@+id/swipeItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
app:contentView="@+id/content"
app:rightMenuView="@+id/tv_delete">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical">
<com.allen.library.SuperTextView
android:id="@+id/stv_name"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
app:sBackgroundDrawableRes="@color/white"
app:sDividerLineType="none"
app:sLeftTextColor="@color/color_333"
app:sLeftTextSize="@dimen/sp_14"
app:sLeftTextString=""
app:sRightIconHeight="@dimen/dp_15"
app:sRightIconRes="@mipmap/arrowdown_gray"
app:sRightIconWidth="@dimen/dp_15"
app:sRightTextColor="@color/color_666"
app:sRightTextString=""
app:sUseRipple="false" />
<LinearLayout
android:id="@+id/ll_site_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_dbdbdb"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/site_code"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/site_code"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="1"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_30"
android:paddingStart="@dimen/dp_5"
android:textColor="@color/attendance_blue"
android:textSize="@dimen/sp_14"
tools:ignore="Autofill,LabelFor,RtlSymmetry" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/city"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/site_city"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_weight="1"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_30"
android:paddingStart="@dimen/dp_5"
android:textColor="@color/attendance_blue"
android:textSize="@dimen/sp_14"
tools:ignore="Autofill,LabelFor,RtlSymmetry" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/duty_man"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_site_duty_man"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_weight="1"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_30"
android:paddingStart="@dimen/dp_5"
android:textColor="@color/attendance_blue"
android:textSize="@dimen/sp_14"
tools:ignore="Autofill,LabelFor,RtlSymmetry" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/contract"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_contract"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="2"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_30"
android:paddingStart="@dimen/dp_5"
android:textColor="@color/attendance_blue"
android:textSize="@dimen/sp_14"
tools:ignore="Autofill,LabelFor,RtlSymmetry" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/site_type"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_site_type"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_15"
android:gravity="center_vertical"
android:minHeight="@dimen/dp_30"
android:paddingStart="@dimen/dp_5"
android:textColor="@color/attendance_blue"
tools:ignore="RtlSymmetry" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
android:background="@color/color_999" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginBottom="@dimen/dp_10"
android:orientation="horizontal">
<com.allen.library.SuperButton
android:id="@+id/sb_special_check"
android:layout_width="0dp"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="1"
android:gravity="center"
android:text="专项检查"
android:textColor="@color/white"
android:visibility="gone"
app:sCornersRadius="@dimen/dp_2"
app:sSelectorNormalColor="@color/blue"
app:sUseSelector="true"
tools:ignore="RtlSymmetry" />
<com.allen.library.SuperButton
android:id="@+id/sb_fly_check"
android:layout_width="0dp"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_15"
android:layout_weight="1"
android:gravity="center"
android:text="开始检查"
android:textColor="@color/blue"
app:sCornersRadius="@dimen/dp_2"
app:sSelectorNormalColor="@color/transparent"
app:sUseSelector="true"
tools:ignore="RtlSymmetry" />
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center_vertical"
android:background="@color/color_999" />
<com.allen.library.SuperButton
android:id="@+id/sb_site_document"
android:layout_width="0dp"
android:layout_height="@dimen/dp_35"
android:layout_weight="1"
android:gravity="center"
android:text="@string/site_document"
android:textColor="@color/blue"
app:sCornersRadius="@dimen/dp_2"
app:sSelectorNormalColor="@color/transparent"
app:sUseSelector="true"
tools:ignore="RtlSymmetry" />
<View
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center_vertical"
android:background="@color/color_999" />
<com.allen.library.SuperButton
android:id="@+id/sb_navi"
android:layout_width="0dp"
android:layout_height="@dimen/dp_35"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="1"
android:gravity="center"
android:text="@string/navigate"
android:textColor="@color/blue"
app:sCornersRadius="@dimen/dp_2"
app:sSelectorNormalColor="@color/transparent"
app:sUseSelector="true"
tools:ignore="RtlSymmetry" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_F6F7FB" />
</LinearLayout>
<TextView
android:id="@+id/tv_delete"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:text="删除"
android:textColor="@color/red"
android:textSize="@dimen/sp_16" />
</com.dtrt.preventpro_irontower.view.weiget.swipe.EasySwipeMenuLayout>
</layout>
Activity中使用
holder.getView<TextView>(R.id.tv_delete).setOnClickListener {
NiceDialog.init().setLayoutId(R.layout.dialog_tips)
.setConvertListener(object : ViewConvertListener() {
override fun convertView(holder: ViewHolder, dialog: BaseNiceDialog) {
(holder.getView<View>(R.id.title) as TextView).text = "确定删除该站点?"
holder.setOnClickListener(R.id.confirm) {
if ("YJCH" == item.checkStatus) {
showToast("已检查站点无法删除")
} else {
halfYearCheckVM.deleteSite(item.contextId)
}
dialog.dismiss()
}
holder.setOnClickListener(R.id.cancel) {
dialog.dismiss()
}
}
}).setOutCancel(false).setMargin(30).show(supportFragmentManager)
val easySwipeMenuLayout = holder.getView<EasySwipeMenuLayout>(R.id.swipeItem)
easySwipeMenuLayout.resetStatus()
}
holder.getView<SuperTextView>(R.id.stv_name).setOnClickListener {
item.isOpen = !item.open
notifyDataSetChanged()
}