androi EpoxyTouchHelper.DragCallbacks пропущенные элементы прыгают вперед и назад при маленьких движениях пальца, и onModelMoved вызывается каждый раз - PullRequest
0 голосов
/ 07 марта 2020

Я нашел интересную Библиотечную эпоксидную смолу, поддерживаемую 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);
        }
    }


...