Aby zrozumieć to pytanie, first read how this method works.Pomoc z problemami ListView Android UI
Próbuję implementuje przeciągnij i upuść ListView, to będzie w porządku, ale nie napotkasz bloku drogowego. Tak więc nie muszę zajmować się wszystkim, przechwytuję (ale zwracam fałsz) MotionEvents wysyłane do ListView, pozwalając na obsługę przewijania i innych rzeczy. Kiedy chcę rozpocząć przeciąganie elementu, zwracam wtedy wartość true i traktuję wszystkie przeciągające się rzeczy. Wszystko działa dobrze, z wyjątkiem jednej rzeczy. Przeciąganie (przeciąganie i upuszczanie) jest uruchamiane, gdy zostanie stwierdzone, że naciśnięto długie naciśnięcie (w trybie onInterceptTouchEvent). Dostaję dla obrazu, który przeciągam w taki sposób. itemPositition jest indeksem wybranego elementu.
(z pominięciem części znaczenia)
...
View dragItem = mListView.getChildAt(itemPosition);
dragItem.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(dragItem.getDrawingCache());
mDragImage = new ImageView(mContext);
mDragImage.setImageBitmap(bitmap);
...
Problemem jest mDragImage jest wypełnione w ten sposób.
Ale, jeśli nie pozwolę ListView nic załatwić. Tak jak w przypadku, zaczynam od przeciągnięcia ACTION_DOWN i zatrzymuję się na ACTION_UP, oczekiwano wyglądu mDragImage (ale oczywiście tracę zdolności przewijania).
Ponieważ przeciągania rozpoczyna się długi prasy, ListView ma okazję do zrobienia rzeczy, zanim nastąpi długie naciśnięcie. Zgaduję, dlaczego tak się dzieje. Po naciśnięciu elementu jest podświetlany przez ListView. Gdzieś to robi, miesza się z bitmapą. Więc kiedy idę, aby to uzyskać, jest w dziwnym stanie (wszystkie czarne).
Widzę dwie możliwości rozwiązania tego problemu, z których żadna nie wiem, jak to zrobić.
Utwórz obraz od podstaw.
Samodzielne podświetlanie (jeśli to jest problem).
Opcja druga wydaje mi się lepsza, z wyjątkiem tego, że zajrzałem do dokumentacji i kodu źródłowego i nie mogłem się dowiedzieć, jak to zrobić. Oto kilka rzeczy, które zrobiłem/wypróbowałem.
ustawić setOnItemClickListener(...) i setOnItemSelectedListener (...) z pustym metody (podkreślając nadal zdarza). (Zanim ktoś sugeruje to, nazywając setOnClickListener wyniki w runtime error).
Spojrzałem też na próby uzyskania ListView do tworzenia nowego elementu (dla opcji 2), ale nie mógł znaleźć sposób.
Zużyłem 45 minut, przeglądając kod źródłowy i dokumentując próbując ustalić, gdzie było wyróżnienie (nigdy go nie znalazłem).
Każda pomoc w ustalaniu tego jest mile widziana.
(Edit1 START)
Więc nie wiem, czy rzeczywiście onLongClickListener działa, zrobiłem błąd przed myśleniem było. Próbuję go teraz skonfigurować, zaktualizuję, gdy się dowiem, czy to działa.
(EDIT1 END)
Ostatnia edycja przed wysłaniem. Próbowałem już teraz użyć onLongClickListener, a obraz jest dobry. Nadal chciałbym wiedzieć, czy istnieje inny sposób. Jak używać OnLongClickListener, aby działało, jest brzydkie, ale działa. Spędziłem tak dużo czasu, próbując to zrozumieć, dobrze byłoby znaleźć odpowiedź. Nadal chcę być w stanie zmienić/obsłużyć kolor podświetlenia, domyślny pomarańczowy kolor nie jest ładny. Och i przepraszam za długość postu. Nie mogłem wymyślić sposobu na skrócenie tego czasu, dostarczając wszystkie informacje, które uważałem za potrzebne.