2017-10-01 4 views
1

ItemTouchHelperを使用して、基本的な「ドラッグ&のドロップ」と「スワイプ・トゥ・ディスマイス」を実装しようとしています。 スワイプは正しく動作し、アイテムはアダプタで正しく削除されますが、アニメーションは正しく表示されますが、「ドラッグ&のドラッグ」動作は非常に奇妙です。長いクリックビューが動いていないのに、アダプターのアイテムを入れ替えるのは正しいです。ItemTouchHelperを正しく使用する方法

this is how it works in my RecyclerView

and this is what I want

私のプレゼンターでこのコード、onSelectedChangedとクリアビューは、項目のみが選択されている方法を明確に実証します。

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を更新しましたし、それが正常に動作します。

私はそれがライブラリのバグだと思うので、同じ問題に直面した場合は、ライブラリを最新バージョンに更新してください。

関連する問題