【问题标题】:Another java.lang.IllegalArgumentException: parameter must be a descendant of this view另一个 java.lang.IllegalArgumentException: 参数必须是这个视图的后代
【发布时间】:2015-06-02 00:39:00
【问题描述】:

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

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

  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"

我有一个编辑文本,但它在可扩展列表视图之外。

我正在尝试解释为什么会发生这种情况以及可能导致这种情况发生的原因。抱歉,我无法发布任何代码。

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

【问题讨论】:

  • 能否请您在崩溃的地方发布相关代码

标签: android listview exception expandablelistview


【解决方案1】:

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

我使用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 可能会先读取左侧的文本视图,然后是中间的文本视图,然后是右侧的文本视图。

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

【讨论】:

  • 真的帮了我。非常感谢!!
  • 非常感谢 - 这对我帮助很大!
【解决方案2】:

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

        }
    });

【讨论】:

    【解决方案3】:

    打开 Google TalkBack 时,我也遇到了同样的错误。就我而言,我正在使用布尔值 attachToParent true 膨胀视图。因此,通过使其为 false 对我有用。

    【讨论】:

      猜你喜欢
      • 2022-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2023-03-16
      • 2022-01-04
      相关资源
      最近更新 更多