सबसे पहले, मैंने पूरे दिन इस पर काम किया लेकिन कुछ भी नहीं किया जा सका। मेरे पास RecyclerView
एक एडाप्टर है जो RecyclerView
के SortedList
का उपयोग करता है। इंटरफ़ेस OnItemChangeListener
सूचित करें ItemChanged रीफ्रेशिंग दृश्य
@Override
public void onItemSwiped(int position) {
notifyItemChanged(position);
removalPendingTimers.add(timerList.get(position));
}
मेरे ViewHolder
पढ़ता राज्य और जब लागू
public class TimerListTouchHelperCallback extends ItemTouchHelper.SimpleCallback {
private OnItemChangeListener onItemChangeListener;
public TimerListTouchHelperCallback(OnItemChangeListener listener, int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
this.onItemChangeListener = listener;
}
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
TimerHolder holder = (TimerHolder) viewHolder;
int holderState = holder.getState();
if (holderState == TimerHolder.TIMER_PENDING_DELETE) return 0;
else return super.getSwipeDirs(recyclerView, viewHolder);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
TimerHolder holder = (TimerHolder) viewHolder;
int position = holder.getAdapterPosition();
// ViewHolder's state is changed that should handle the layout change.
holder.setState(TimerHolder.TIMER_PENDING_DELETE);
if (onItemChangeListener != null) onItemChangeListener.onItemSwiped(position);
}
protected interface OnItemChangeListener{
void onItemSwiped(int position);
}
}
यहाँ TouchHelper
timerAdapter = new TimerAdapter(this, timerList);
timerListView.setAdapter(timerAdapter);
TimerListTouchHelperCallback touchHelperCallback = new TimerListTouchHelperCallback(
timerAdapter,
ItemTouchHelper.LEFT,
ItemTouchHelper.LEFT);
ItemTouchHelper swipeToDismissTouchHelper = new ItemTouchHelper(touchHelperCallback);
swipeToDismissTouchHelper.attachToRecyclerView(timerListView);
मेरे एडाप्टर के प्रारंभ है: मैं कॉलबैक वर्ग के साथ TouchHelper
को लागू करने की कोशिश की राज्य TimerHolder.TIMER_PENDING_DELETE
है यह बाकी दृश्य को छुपाता है और इंटरफ़ेस को एक un के साथ दिखाता है बटन करो लेकिन यह तब तक नहीं हो रहा है जब तक कि मैं दृश्य को स्क्रॉल नहीं करता और इसे फिर से स्क्रॉल नहीं करता। कोई सुझाव जो मुझे याद आ रहा है?
लिंक
Adapter class ViewHolder class
क्या आपको आइटम को स्वाइप किए जाने पर आइटम को हटाया जाना चाहिए और फिर एडाप्टर को सूचित करना चाहिए? –
'OnItemSwiped' बाद में आइटम को हटाने के लिए एक हैंडलर को कॉल करेगा, जैसे जीमेल ऐप में। –
मैंने कोड अपडेट किया है। –