2015-06-02 11 views
6

Użytkownicy uzyskują następujący wyjątek w mojej aplikacji na niektórych telefonach. Próbowałem odtworzyć błąd sam, ale nie mogłem. Przeszukałem przepełnienie stosu w poszukiwaniu podobnych problemów i wypróbowałem ich rozwiązania, ale żaden z nich nie działa.Kolejny wyjątek java.lang.IllegalArgumentException: parametr musi być potomkiem tego widoku.

Oto odpowiedzi Próbowałem już:

  1. Preventing/catching "IllegalArgumentException: parameter must be a descendant of this view" error
  2. java.lang.IllegalArgumentException: parameter must be a descendant of this view Error
  3. Ustawianie następujący atrybut: android:windowSoftInputMode="stateHidden|adjustPan"

Mam EditText ale poza expandablelistview.

Próbuję znaleźć wyjaśnienie, dlaczego tak się dzieje i co może spowodować. Przepraszam, ale nie mogę opublikować żadnego kodu.

java.lang.IllegalArgumentException: parametr ten musi być potomkiem to widok w android.view.ViewGroup.offsetRectBetweenParentAndChild (ViewGroup.java:4568) w android.view.ViewGroup.offsetDescendantRectToMyCoords (ViewGroup.java : 4505) w android.view.ViewGroup $ ViewLocationHolder.init (ViewGroup.java:6743) w android.view.ViewGroup $ ViewLocationHolder.obtain (ViewGroup.java:6680) w android.view.ViewGroup $ ChildListForAccessibility.init (ViewGroup.java:6638) na android.view.ViewGroup $ ChildListForAccessibility.obtain (ViewGroup.java:6606) na android.v iew.ViewGroup.addChildrenForAccessibility (ViewGroup.java:1697) w android.view.ViewGroup.onInitializeAccessibilityNodeInfoInternal (ViewGroup.java:2525) w android.view.View.onInitializeAccessibilityNodeInfo (View.java:5213) w android.widget. AdapterView.onInitializeAccessibilityNodeInfo (AdapterView.java:946) w android.widget.AbsListView.onInitializeAccessibilityNodeInfo (AbsListView.java:1449) w android.widget.ListView.onInitializeAccessibilityNodeInfo (ListView.java:3781) w android.widget.ExpandableListView. onInitializeAccessibilityNodeInfo (ExpandableListView.java:1348) na android.view.View.createAccessibilityNodeInfoInternal (View.java:5174) na android.view.View.createAccessibilityNodeInfo (View.java:5161) na android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode (AccessibilityInteractionController.java:811) w android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode (AccessibilityInteractionController.java:834) w android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode (AccessibilityInteractionController. Java: 834) na android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos (AccessibilityInteractionController.java:720) w android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread (AccessibilityInteractionController.java:147) na android.view.AccessibilityInteractionCont roller.access 300 USD (AccessibilityInteractionController.java:49) at android.view.AccessibilityInteractionController $ PrivateHandler.handleMessage (AccessibilityInteractionController.java:971) na android.os.Handler.dispatchMessage (Handler.java:102) na android.os .Looper.loop (Looper.java:136) w android.app.ActivityThread.main (ActivityThread.java: 5097) na java.lang.reflect.Method.invokeNative (Method.java) na java.lang.reflect.Method.invoke (Method.java:515) na com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:785) w com.android.internal.os.ZygoteInit.main (ZygoteInit.java:601) w dalvik.system.NativeStart.main (NativeStart.java)

+0

Czy możesz pisać odpowiedni kod, gdzie jest upaść –

Odpowiedz

5

Problem został spowodowany przez dodanie niepoprawnie zawyżonego nagłówka do dwóch różnych widoków list.

Napełniłem widok, używając listViewA jako elementu nadrzędnego i dodając go również do listViewB. Jako takie:

RelativeLayout listViewHeader = (RelativeLayout) inflater.inflate(R.layout.listviewheader, listViewA, false); 

// Set some views 

listViewA.addHeaderView(listViewHeader); 
listViewB.addHeaderView(listViewHeader); 

Naprawiłem go poprzez zmianę wyżej na następujące kwestie:

RelativeLayout listViewHeaderA = (RelativeLayout) inflater.inflate(R.layout.listviewheader, listViewA, false); 
RelativeLayout listViewHeaderB = (RelativeLayout) inflater.inflate(R.layout.listviewheader, listViewB, false); 

listViewA.addHeaderView(listViewHeaderA); 
listViewB.addHeaderView(listViewHeaderB); 

jak do odtwarzania katastrofę, problemem stało, kiedy Google Talk Back jest włączony. Oto moje podejście do tej sytuacji: Google Talk Back zmienia tekst na mowę na widokach, które są ostre (za pomocą dotyku lub automatycznego skupienia). Po przejściu do ekranu z wieloma widokami żądającymi fokusa, odczytuje widoki według hierarchii/porządku.

Jeśli masz układ (rodzic) z trzema widokami (dzieci), Google Talk Back sprawdza, w jaki sposób są uporządkowane widoki, a następnie odczytuje je odpowiednio. Na przykład w układzie z trzema widokami tekstowymi ustawionymi poziomo Google Talk Back może najpierw przeczytać lewy widok tekstowy, potem środkowy, a potem ten po prawej.

W moim przypadku nadmuchałem widok nagłówka z listViewA jako nadrzędny i dodałem ten widok zarówno do listViewA i listViewB. Kiedy listViewB zyskuje ostrość, a Google Talk Back próbuje zinterpretować swoje dzieci, widzi, że widok nagłówka nie jest dzieckiem listy i zgłasza wyjątek. Dzieje się tak również, jeśli nadmucham widok nagłówka bez rodziców (null).

+0

naprawdę pomógł mi .. Dziękuję bardzo !! – Bunny

0

Ten sam błąd wystąpił również podczas włączania Google TalkBack. W moim przypadku nadpisałem widok boolean attachToParent true.So, czyniąc go fałszywym dla mnie działającym.

0

mam dołączania na przewijania słuchacza w Scrollview i rozwiazuje problemu

lst_payment_info.setOnScrollListener(new AbsListView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      if (SCROLL_STATE_TOUCH_SCROLL == scrollState) { 
       View currentFocus = getCurrentFocus(); 
       if (currentFocus != null) { 
        currentFocus.clearFocus(); 
       } 
      } 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

     } 
    }); 
Powiązane problemy