ClickListener представления ItemTouchHelper
Недавно я обнаружил ItemTouchHelper (точнее, функцию салфетки), и я использую в проекте, который я работаю.
Я создал FrameLayout с 2 контейнерами: один для передней и другой для задней. Задний контейнер имеет TextView с (в коде) имеет clickListener
,
Это FrameLayout:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/background_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/work_order_deleted_item_background_color">
<TextView
android:id="@+id/delete_wo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/activity_horizontal_margin"
android:text="@string/action_delete"
android:textColor="@android:color/white"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:visibility="invisible"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
...
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/font_grey_secondary"/>
</FrameLayout>
ViewHolder:
class CustomViewHolder extends RecyclerView.ViewHolder {
protected RelativeLayout container;
protected RelativeLayout backgroundContainer;
protected TextView deleteLabel;
public CustomViewHolder(View view) {
super(view);
this.container = view.findViewById(R.id.container);
this.backgroundContainer = view.findViewById(R.id.background_container);
this.deleteLabel = backgroundContainer.findViewById(R.id.delete_wo);
}
}
И это когда я вызываю внутри onBindViewHolder:
holder.deleteLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
presenter.checkDeletion();
}
});
ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder){
final View container = ((WorkOrderAdapter.CustomViewHolder)viewHolder).container;
getDefaultUIUtil().clearView(container);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
final View container = ((WorkOrderAdapter.CustomViewHolder) viewHolder).container;
getDefaultUIUtil().onDraw(c, recyclerView, container, dX, dY, actionState, isCurrentlyActive);
}
@Override
public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
final View container = ((WorkOrderAdapter.CustomViewHolder) viewHolder).container;
getDefaultUIUtil().onDrawOver(c, recyclerView, container, dX, dY,
actionState, isCurrentlyActive);
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemTouchHelperCallback);
itemTouchHelper.attachToRecyclerView(recyclerviewWorkOrder);
Вид переднего плана при пролистывании, даже если я скрываю вид переднего плана, слушатель фона не может работать. Только если я отчаянно нажму на него, в какой-то момент сработает.
Есть ли конфликт с раскладками z position?