"& drop"및 "swipe-to-dismiss"기본 구현에 RecyclerView
과 ItemTouchHelper
을 사용하려고합니다. 스 와이프가 올바르게 작동하고 항목이 어댑터에서 올바르게 삭제되고 애니메이션이 정확하지만 "& 드래그 드래그"동작이 매우 이상합니다. 긴 클릭 후보기가 움직이지 않지만 어댑터의 항목을 바꿔도됩니다. 항목을 선택하는 방법ItemTouchHelper를 올바르게 사용하는 방법
this is how it works in my RecyclerView
내 발표자에이 코드는 onSelectedChanged 및시 clearView는 명확하게 설명합니다. 내 어댑터
addedCitiesRecycler.setLayoutManager(llmAddedCities);
adapterAddedCities = new AdapterAddedCities();
ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.START | ItemTouchHelper.END) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
adapterAddedCities.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapterAddedCities.onItemDismiss(viewHolder.getAdapterPosition());
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
AdapterAddedCities.ViewHolder holder = (AdapterAddedCities.ViewHolder) viewHolder;
holder.itemView.setBackgroundColor(Color.LTGRAY);
}
super.onSelectedChanged(viewHolder, actionState);
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
AdapterAddedCities.ViewHolder holder = (AdapterAddedCities.ViewHolder) viewHolder;
holder.itemView.setBackgroundColor(0);
}
};
itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(addedCitiesRecycler);
이 방법은
public void onItemDismiss(int position) {
citiesData.remove(position);
notifyItemRemoved(position);
}
public void onItemMove(int fromPosition, int toPosition) {
CityInfo tmp = citiesData.remove(fromPosition);
citiesData.add(toPosition > fromPosition ? toPosition - 1 : toPosition, tmp);
notifyItemMoved(fromPosition, toPosition);
}
질문에 직접 리소스를 포함하십시오. –
@MaciejJureczko는 조언을 주셔서 감사합니다. 그러나 그림을 포함시킬 수 없습니다. 평판 포인트가 부족합니다. –