2016-09-27 13 views
13

Używam ondragListener dla przeciągnij widok. Mój katalog główny to viewgroup z większą liczbą kontenerów viewgroup w katalogu głównym i dodawanie widoków takich jak imageview/textview wewnątrz kontenerów.Błąd stackoverflow w widoku przeciągnij upuść aktualizacji

Jeśli używam tylko pojemnik (ViewGroup), jak linearlayout dla przeciągnij i upuść jego pracy grzywny, ale jeśli zacznę dodanie widoki jak imageview wewnątrz tych pojemników i wciąż przeciągając punkt pojemniki gospodarstwa tylko ten pogląd.

onActionDrop otrzymuje stackoverflow error : stack size 8MB.

kod

onActionDrop jest:

if (e.getAction()==DragEvent.ACTION_DROP) { 
     final View view = (View) e.getLocalState(); 
     final ViewGroup from = (ViewGroup) view.getParent(); 
     from.removeView(view); 
     final LinearLayout toView = (LinearLayout) v; 
     toView.addView(view);} 

Logi błędów:

java.lang.StackOverflowError: stack size 8MB 
    android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6546) 
    android.os.TransactionTooLargeException: data parcel size 26840220 bytes 
android.os.BinderProxy.transactNative(Native Method) 
android.os.BinderProxy.transact(Binder.java:503) 
android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425) 
com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90) 
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) 
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) 
+0

Czy to pełny stacktrace? –

+1

Twój kod wydaje się być właściwy, ale problem może dotyczyć liczby elementów wizualnych przenoszonych z jednego kontenera na drugi, może być konieczne zniszczenie i odtworzenie przeciągniętego widoku lub coś podobnego. Zobacz ten inny numer http://stackoverflow.com/questions/11451393/what-to-do-on-transactiontoolargeexception – eduyayo

+0

@TinTran Tak, to jest to. –

Odpowiedz

0

myślę, że powinno być patrząc na TransactionTooLarge wyjątkiem zamiast StackOverflow jednym. TransactionTooLarge może czasami być trudny do wyśledzenia, ale zazwyczaj ma to związek z przesyłaniem zbyt dużej ilości danych między Activity/Fragment lub przechowywanych w savedInstanceState. Jak podkreślił @eduyayo w komentarzu powyżej, można spojrzeć na to stanowisko:

What to do on TransactionTooLargeException

doświadczyłem podobnego błędu jakiś czas temu, a to ze względu na ogromną listę była przekazywana z Aktywność do fragmentu i sama awaria miała miejsce w zupełnie przypadkowym miejscu.