2017-10-01 15 views
1

"& drop"및 "swipe-to-dismiss"기본 구현에 RecyclerViewItemTouchHelper을 사용하려고합니다. 스 와이프가 올바르게 작동하고 항목이 어댑터에서 올바르게 삭제되고 애니메이션이 정확하지만 "& 드래그 드래그"동작이 매우 이상합니다. 긴 클릭 후보기가 움직이지 않지만 어댑터의 항목을 바꿔도됩니다. 항목을 선택하는 방법ItemTouchHelper를 올바르게 사용하는 방법

this is how it works in my RecyclerView

and this is what I want

내 발표자에이 코드는 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); 
} 
+0

질문에 직접 리소스를 포함하십시오. –

+0

@MaciejJureczko는 조언을 주셔서 감사합니다. 그러나 그림을 포함시킬 수 없습니다. 평판 포인트가 부족합니다. –

답변

0

나는 build.gradle에서 com.android.support:recyclerview-v7:27.0.0com.android.support:recyclerview-v7:26.0.0-alpha1 업데이트했는데 그것을 잘 작동합니다.

저는 라이브러리에 버그가 있다고 생각합니다. 동일한 문제가 발생한다면 라이브러리를 최신 버전으로 업데이트하십시오.