Чтобы понять этот вопрос, сначала прочитайте, как работает этот метод.
Я пытаюсь реализовать перетаскивание ListView , все идет хорошо, но натолкнулся на
дорожный блок. Поэтому мне не нужно обрабатывать все, я перехватываю (но возвращаю false) MotionEvents , отправленные в ListView, позволяя ему обрабатывать прокрутку и прочее. Когда я хочу начать перетаскивание элемента, я возвращаю true и обрабатывал все элементы перетаскивания. Все работает нормально, кроме одной вещи. Перетаскивание (drag and drop) начинается, когда определено, что длительное нажатие произошло (в onInterceptTouchEvent). Я получаю Bitmap для изображения, которое я так перетаскиваю. itemPositition - индекс выбранного элемента.
(без учета не относящихся к делу частей)
...
View dragItem = mListView.getChildAt(itemPosition);
dragItem.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(dragItem.getDrawingCache());
mDragImage = new ImageView(mContext);
mDragImage.setImageBitmap(bitmap);
...
Проблема в том, что mDragImage - сплошной черный цвет, подобный этому.
Но, если я не позволю ListView обрабатывать что-либо. Например, я запускаю перетаскивание на ACTION_DOWN и останавливаюсь на ACTION_UP , mDragImage выглядит ожидаемым (но я, очевидно, теряю способности прокрутки).
Поскольку перетаскивание начинается с длинного нажатия, ListView предоставляется возможность сделать что-то до того, как произойдет длительное нажатие. Это мое предположение относительно того, почему это происходит. Когда элемент нажимается, он выделяется ListView. Где-то при этом он портит растровое изображение. Поэтому, когда я иду, чтобы получить это, это в странном состоянии (все черное).
Я вижу два варианта исправления, но я не знаю, как это сделать.
Создание изображения с нуля.
Работаю с подсветкой самостоятельно (если в этом проблема).
Второй вариант кажется мне лучшим, за исключением того, что я посмотрел документацию и исходный код и не смог выяснить, как это сделать. Вот некоторые вещи, которые я сделал / попробовал.
Я установил setOnItemClickListener (...) и
setOnItemSelectedListener (...) с пустым методом (выделение
все еще бывает). (Прежде чем кто-либо предлагает
setOnClickListener приводит к ошибке во время выполнения.)
Я также пытался заставить ListView создать новый элемент
(для варианта 2), но не смог найти способ.
Потратил 45 минут на просмотр исходного кода и
документация пытается определить, где выделение было
происходит (я так и не нашел).
Любая помощь, исправляющая это, будет оценена.
(EDIT1 START)
Так что на самом деле я не знаю, работает ли onLongClickListener, я сделал ошибку, прежде чем подумать, что это так. Я пытаюсь настроить его прямо сейчас, обновлю, когда узнаю, работает ли он.
(EDIT1 END)
Последнее редактирование перед публикацией. Я пытался использовать onLongClickListener только сейчас, и изображение хорошее. Я все еще хотел бы знать, есть ли другой путь. То, как я должен использовать onLongClickListener, чтобы заставить вещи работать, ужасно, но это работает. Я также потратил так много времени, пытаясь выяснить это, было бы неплохо узнать ответ. Я все еще хочу иметь возможность изменять / обрабатывать цвет подсветки, по умолчанию оранжевый цвет не очень хорош. Ох и прости насчет длины поста. Я не мог придумать способ сделать его короче, предоставляя всю информацию, которая, по моему мнению, была необходима.