另一个java.lang.IllegalArgumentException:参数必须是此视图的后代

时间:2015-06-02 00:39:01

标签: android listview exception expandablelistview

用户在某些手机上的应用中遇到以下异常。我试过自己重现错误,但不能。我通过堆栈溢出搜索了类似的问题并尝试了他们的解决方案,但似乎都没有工作。

以下是我已经尝试过的答案:

  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. 设置以下属性:android:windowSoftInputMode="stateHidden|adjustPan"
  4. 我有一个edittext但它在expandablelistview之外。

    我试图找到解释为什么会发生这种情况以及可能导致这种情况发生的原因。我道歉但我无法发布任何代码。

      

    java.lang.IllegalArgumentException:参数必须是。的后代   这个观点          在android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:4568)          在android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:4505)          在android.view.ViewGroup $ ViewLocationHolder.init(ViewGroup.java:6743)          在android.view.ViewGroup $ ViewLocationHolder.obtain(ViewGroup.java:6680)          在android.view.ViewGroup $ ChildListForAccessibility.init(ViewGroup.java:6638)          在android.view.ViewGroup $ ChildListForAccessibility.obtain(ViewGroup.java:6606)          在android.view.ViewGroup.addChildrenForAccessibility(ViewGroup.java:1697)          在android.view.ViewGroup.onInitializeAccessibilityNodeInfoInternal(ViewGroup.java:2525)          在android.view.View.onInitializeAccessibilityNodeInfo(View.java:5213)          在android.widget.AdapterView.onInitializeAccessibilityNodeInfo(AdapterView.java:946)          在android.widget.AbsListView.onInitializeAccessibilityNodeInfo(AbsListView.java:1449)          在android.widget.ListView.onInitializeAccessibilityNodeInfo(ListView.java:3781)          在android.widget.ExpandableListView.onInitializeAccessibilityNodeInfo(ExpandableListView.java:1348)          在android.view.View.createAccessibilityNodeInfoInternal(View.java:5174)          在android.view.View.createAccessibilityNodeInfo(View.java:5161)          在android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:811)          在android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:834)          在android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchDescendantsOfRealNode(AccessibilityInteractionController.java:834)          在android.view.AccessibilityInteractionController $ AccessibilityNodePrefetcher.prefetchAccessibilityNodeInfos(AccessibilityInteractionController.java:720)          在android.view.AccessibilityInteractionController.findAccessibilityNodeInfoByAccessibilityIdUiThread(AccessibilityInteractionController.java:147)          在android.view.AccessibilityInteractionController.access $ 300(AccessibilityInteractionController.java:49)          在android.view.AccessibilityInteractionController $ PrivateHandler.handleMessage(AccessibilityInteractionController.java:971)          在android.os.Handler.dispatchMessage(Handler.java:102)          在android.os.Looper.loop(Looper.java:136)          在android.app.ActivityThread.main(ActivityThread.java:5097)          at java.lang.reflect.Method.invokeNative(Method.java)          在java.lang.reflect.Method.invoke(Method.java:515)          在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)          在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)          在dalvik.system.NativeStart.main(NativeStart.java)

3 个答案:

答案 0 :(得分:6)

问题是由于向两个不同的列表视图添加了错误膨胀的标题引起的。

我使用listViewA作为父级对视图进行了虚增,并将其添加到listViewB。就这样:

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

// Set some views

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

我通过将上述内容更改为以下内容来修复它:

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);

至于重现崩溃,Google Talk Back打开时会出现问题。以下是我对这种情况的看法:Google Talk Back会对关注的视图(通过触摸或自动聚焦)进行文本到语音转换。当它进入具有多个请求焦点的视图的屏幕时,它根据层次/顺序读取视图。

如果您的布局(父级)有三个视图(子级),Google Talk Back会检查视图的排列方式,然后相应地进行读取。例如,在水平排列的三个文本视图的布局中,Google Talk Back可以先读取左侧textview,然后读取中间的一个,然后读取右侧的一个。

在我的情况下,我正在使用listViewA作为父级来扩展标题视图,并将该视图添加到listViewAlistViewB。当listViewB获得焦点并且Google Talk Back尝试解释其子节点时,它会看到标题视图不是列表的子节点并抛出异常。如果我没有父项(null)来扩展标题视图,也会发生这种情况。

答案 1 :(得分:0)

打开Goog​​le TalkBack时,我也遇到了同样的错误。在我的情况下,我使用布尔值attachToParent true来膨胀视图。所以让它为我工作是假的。

答案 2 :(得分:0)

我在ScrollView中追加了滚动侦听器 和解决问题

 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) {

        }
    });