Я реализовал эффект смахивания Recycler с помощью ItemTouchHelper.SimpleCallback и поместил несколько кнопок на вид сзади, который отображается после смахивания. забавная проблема в том, что когда я нажимал кнопку, она не работала. Я должен нажать их дважды, и с третьей попытки они работают!!! это гифка:
Код: Выделить всё
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT ) {
@Override
public int getMovementFlags(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder) {
int dragFlags = 0;
int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public boolean isLongPressDragEnabled() {
return false;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
((InvoiceItemListAdapter.ViewHolder)viewHolder).lunchSwipeLeftEffect(dX);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
}
};
recentInvoicesItemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
recentInvoicesItemTouchHelper.attachToRecyclerView(recentInvoiceRecyclerView);
а это мой RecyclerView.ViewHolder:
Код: Выделить всё
private class RecentInvoiceViewHolder extends RecyclerView.ViewHolder{
private TextView price;
private TextView hours;
private TextView minutes;
private TextView desc;
private View color;
private View sent;
private View swipeActionsView;
private View frontView;
private Button print;
private Button cancelSwipe;
boolean swiped = false;
public RecentInvoiceViewHolder(View view) {
super(view);
price = (TextView) view.findViewById(R.id.invoice_review_in_day_price);
hours = (TextView) view.findViewById(R.id.invoice_review_in_day_hours);
minutes = (TextView) view.findViewById(R.id.invoice_review_in_day_minutes);
desc = (TextView) view.findViewById(R.id.invoice_review_in_day_decs);
color = view.findViewById(R.id.invoice_review_in_day_color);
sent = view.findViewById(R.id.invoice_review_in_day_sent_check);
swipeActionsView = view.findViewById(R.id.swipe_actions);
frontView = view.findViewById(R.id.front_view);
print = (Button) view.findViewById(R.id.print_recent_invoice);
cancelSwipe = (Button) view.findViewById(R.id.cancel_swipe);
cancelSwipe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
frontView.setTranslationX(0);
frontView.setVisibility(View.VISIBLE);
swiped = false;
}
});
}
public void lunchSwipeEffect(float dx){
if(!swiped)
frontView.setTranslationX(dx);//TranslationX(dx);
if(Math.abs(dx)> frontView.getMeasuredWidth()) {
swiped = true;
frontView.setVisibility(View.GONE);
}
}
}
и, наконец, это мой макет ViewHolder: < / p > < b r / > < b r / > < c o d e > & l t ; ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " u t f - 8 " ? & g t ; < b r / > < b r / > & l t ; F r a m e L a y o u t < b r / > x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d " < b r / > a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i n v o i c e _ i t e m _ h e i g h t " < b r / > a n d r o i d : l a y o u t _ m a r g i n = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ m a r g i n " < b r / > a n d r o i d : c l i p C h i l d r e n = " f a l s e " < b r / > a n d r o i d : c l i p T o P a d d i n g = " f a l s e " & g t ; < b r / > < b r / > & l t ; T a b l e L a y o u t < b r / > a n d r o i d : i d = " @ + i d / s w i p e _ a c t i o n s " < b r / > a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : s t r e t c h C o l u m n s = " 0 , 1 , 2 " < b r / > a n d r o i d : c l i c k a b l e = " f a l s e " & g t ; < b r / > & l t ; T a b l e R o w < b r / > a n d r o i d : l a y o u t _ w e i g h t = " 1 " < b r / > & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : i d = " @ + i d / p r i n t _ r e c e n t _ i n v o i c e " < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " p r i n t " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 0 " / & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " p r i n t " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 1 " / & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " p r i n t " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 2 " / & g t ; < b r / > & l t ; / T a b l e R o w & g t ; < b r / > & l t ; T a b l e R o w < b r / > a n d r o i d : l a y o u t _ w e i g h t = " 1 " & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : i d = " @ + i d / c a n c e l _ s w i p e " < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " c a n c e l " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 0 " / & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " p r i n t " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 1 " / & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t B u t t o n < b r / > a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : t e x t = " p r i n t " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " < b r / > a n d r o i d : l a y o u t _ c o l u m n = " 2 " / & g t ; < b r / > & l t ; / T a b l e R o w & g t ; < b r / > & l t ; / T a b l e L a y o u t & g t ; < b r / > < b r / > < b r / > & l t ; R e l a t i v e L a y o u t < b r / > a n d r o i d : i d = " @ + i d / f r o n t _ v i e w " < b r / > a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : b a c k g r o u n d = " # f f f " < b r / > a n d r o i d : c l i c k a b l e = " t r u e " < b r / > & g t ; < b r / > & l t ; V i e w < b r / > a n d r o i d : i d = " @ + i d / i n v o i c e _ r e v i e w _ i n _ d a y _ c o l o r " < b r / > a n d r o i d : l a y o u t _ w i d t h = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ c o l o r e d _ v i e w _ w i d t h " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ a l i g n P a r e n t R i g h t = " t r u e " < b r / > a n d r o i d : b a c k g r o u n d = " @ d r a w a b l e / i n v o i c e _ r e v i e w _ b o x _ r a d i u s _ r i g h t _ s h a p e " / & g t ; < b r / > < b r / > & l t ; L i n e a r L a y o u t x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d " < b r / > a n d r o i d : o r i e n t a t i o n = " v e r t i c a l " < b r / > a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ t o L e f t O f = " @ + i d / i n v o i c e _ r e v i e w _ i n _ d a y _ c o l o r " < b r / > a n d r o i d : l a y o u t _ a l i g n P a r e n t L e f t = " t r u e " < b r / > a n d r o i d : b a c k g r o u n d = " @ d r a w a b l e / i n v o i c e _ r e v i e w _ m a i n _ b o x _ r a d i u s _ s h a p e " < b r / > a n d r o i d : p a d d i n g = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ b o r d e r " & g t ; < b r / > < b r / > & l t ; L i n e a r L a y o u t < b r / > a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " 0 p x " < b r / > a n d r o i d : l a y o u t _ w e i g h t = " @ i n t e g e r / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t o p _ i n v o i c e _ s e c t i o n _ w e i g h t " < b r / > a n d r o i d : o r i e n t a t i o n = " h o r i z o n t a l " < b r / > a n d r o i d : b a c k g r o u n d = " @ d r a w a b l e / i n v o i c e _ r e v i e w _ b o x _ r a d i u s _ t o p _ l e f t _ s h a p e " < b r / > a n d r o i d : p a d d i n g = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t o p _ s e c t i o n _ p a d d i n g " & g t ; < b r / > & l t ; L i n e a r L a y o u t < b r / > a n d r o i d : l a y o u t _ w i d t h = " 0 p x " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ w e i g h t = " 1 " < b r / > a n d r o i d : o r i e n t a t i o n = " h o r i z o n t a l " & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s . I r a n F o n t T e x t V i e w < b r / > a n d r o i d : i d = " @ + i d / i n v o i c e _ r e v i e w _ i n _ d a y _ h o u r s " < b r / > a n d r o i d : l a y o u t _ w i d t h = " 0 p x " < b r / > a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " < b r / > a n d r o i d : l a y o u t _ w e i g h t = " 1 " < b r / > a n d r o i d : l a y o u t _ m a r g i n L e f t = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ m a r g i n " < b r / > a n d r o i d : t e x t S i z e = " @ d i m e n / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ f o n t " < b r / > a n d r o i d : t e x t C o l o r = " @ c o l o r / a r c h i v e d _ r i g h t _ o n e _ d a y _ i t e m _ t i m e _ t e x t _ c o l o r " < b r / > a n d r o i d : g r a v i t y = " c e n t e r " < b r / > a n d r o i d : b a c k g r o u n d = " @ d r a w a b l e / c l o c k _ b a c k g r o u n d " < b r / > s t y l e = " @ s t y l e / C u s t o m F o n t S t y l e Y e k a n " / & g t ; < b r / > & l t ; i r . m a s n a . h e t a b . v i e w s.IranFontTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="@dimen/archived_right_one_day_item_time_separator_font"
android:textColor="@color/archived_right_one_day_item_time_text_color"
android:text=":"
android:layout_marginTop="@dimen/archived_right_one_day_item_time_separator_margin_top"/>
и recyclerView находится в NestedScrollView с эффектом сворачивающейся панели инструментов.
Какие представления требуют двух первых щелчков?!
Подробнее здесь:
https://stackoverflow.com/questions/446 ... er-swiping