Заставьте ItemTouchHelper запускать OnMove только тогда, когда я отпускаю касание в списке RecyclerView. - PullRequest
0 голосов
/ 27 марта 2020

У меня есть базовый c RecyclerView список и я добавил ItemTouchHelper для перетаскивания элементов списка.

Проблема, с которой я столкнулся, заключается в том, что он запускается onMove на каждом один элемент списка, который он пропускает, и приложение сильно отстает.

Есть ли способ реализовать его так, чтобы onMove запускался, только когда я освобождаю удержание элемента списка RecyclerView?

Спасибо.

MainActivity. java

public class pillar_sort extends AppCompatActivity {

private MyRecyclerViewAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    // Initialize layout
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pillar_sort);

    final SharedPreferences sharedPref = // Get SharedPreferences
    final ArrayList<String> modules = // Import a list
    final ArrayList<Boolean> visibility = // Import a list
    RecyclerView recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MyRecyclerViewAdapter(this, modules, visibility, cardcolor, txtcolor);
    recyclerView.setAdapter(adapter);

    VerticalSpaceItemDecoration decor = new VerticalSpaceItemDecoration();
    recyclerView.addItemDecoration(decor);

    ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP|ItemTouchHelper.DOWN, 0) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder dragged, @NonNull RecyclerView.ViewHolder target) {
            int position_dragged = dragged.getAdapterPosition();
            int position_target = target.getAdapterPosition();
            Collections.swap(modules,position_dragged,position_target);
            adapter.notifyItemMoved(position_dragged,position_target);
            adapter.notifyDataSetChanged();
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

        }
    });

    helper.attachToRecyclerView(recyclerView);
}

MyRecyclerViewAdapter. java

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

// Variables go here

MyRecyclerViewAdapter( /* a lot of data to pass onto the adapter */ ) {
    // get data from MainActivity and put on variables
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
    CardView card = view.findViewById(R.id.card);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position){
    // Put data to TextViews and set card color
}

@Override
public int getItemCount() {
    return modules.size();
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView myTextView;
    ImageButton image_visibility;

    ViewHolder(View itemView) {
        super(itemView);
        myTextView = itemView.findViewById(R.id.rowText);
        image_visibility = itemView.findViewById(R.id.imageButton);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...