Я нашел интересную Библиотечную эпоксидную смолу, поддерживаемую Airbnb. Это позволяет строить более сложные представления переработчика. Я использую Java версию. Я использовал их учебник и [https://github.com/airbnb/epoxy/wiki] , чтобы попробовать. Но я попадаю в проблему перетаскивания предметов.
Когда я начинаю перетаскивать Предмет («No1») и вставляю один или несколько других («No2», «No3») предметов, пропущенные предметы («No2»). "," №3 ") начинают прыгать вперед и назад на свои стартовые места. Это происходит даже при крошечных движениях перетаскиваемого элемента («№ 1»). И onModelMoved каждый раз звонил по движениям.
Я не смог найти никакой информации о том, как решить эту проблему или даже с чего начать отладку. Любые идеи? Я посмотрел в их примере, который отлично работает, но не смог найти никакой разницы в моем коде. [https://github.com/airbnb/epoxy/wiki/Sample-App]
Мой код прост:
EpoxyTouchHelper.DragCallbacks
EpoxyTouchHelper.DragCallbacks<TitleViewModel_> callbacks =
new EpoxyTouchHelper.DragCallbacks<TitleViewModel_>() {
@Override
public void onModelMoved(int fromPosition, int toPosition,
TitleViewModel_ modelBeingMoved, View itemView) {
Log.d(TAG, "onModelMoved:");
}
@Override
public void onDragStarted(TitleViewModel_ model, View itemView, int adapterPosition) {
Log.d(TAG, "onDragStarted:");
}
};
EpoxyTouchHelper.initDragging(controller)
.withRecyclerView(mRecyclerView)
.forVerticalList()
.withTarget(TitleViewModel_.class)
.andCallbacks(callbacks);
TitleView. java
...
@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT)
public class TitleView extends LinearLayout{
@TextProp CharSequence title; // Epoxy binds data automaticly
@CallbackProp @Nullable OnClickListener clickListener; //Epoxy binds data automaticly to listeners
private TextView titleTextView;
public TitleView(Context context) {
super(context);
inflate(getContext(), R.layout.epoxy_folder_favorite_item_title, this);
titleTextView = findViewById(R.id.epoxy_folder_item_title_text_view);
}
@AfterPropsSet
void postBindSetup() {
titleTextView.setText(title);
titleTextView.setOnClickListener(clickListener);
}
}
Контроллер buildModels
@Override
protected void buildModels(List<Favorite> favorites) {
for (Favorite favorite: favorites) {
new TitleViewModel_()
.id(favorite.getId())
.title(favorite.getName())
.clickListener(v -> callbacks.onFavoritItemClicked(favorite.getTrackItemId()))
.addTo(this);
}
}