【问题标题】:java.lang.IllegalArgumentException: parameter must be a descendant of this view Errorjava.lang.IllegalArgumentException:参数必须是此视图的后代错误
【发布时间】:2012-05-23 14:19:59
【问题描述】:

我的 ViewGroup 有一个奇怪的错误。 对于我的主视图,我在此链接中使用类 ViewFlow project

    java.lang.IllegalArgumentException: parameter must be a descendant of this view
        at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:4153)
        at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:4090)
at android.view.ViewRootImpl.scrollToRectOrFocus(ViewRootImpl.java:2129)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:1849)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1641)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2449)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

当我尝试使用 Intent 或 finish() 返回此视图时会发生此错误;另一个视图中的方法。当我使用返回按钮时,这不是问题。

所以我不知道为什么会出现此错误。 感谢您的帮助。

【问题讨论】:

  • 哪一方的代码需要你?我对 viewFlow 的初始化、Viewflow 的代码(已链接)或我在其中执行 finish() 的第二个活动的代码; ?

标签: android viewgroup


【解决方案1】:

有同样的问题。我使用 ViewFlow 作为父视图,使用几个 GridView 作为子视图。当我按下 Home 键并在左右滚动这些子视图后再次重新启动 Activity 时会发生此错误。

这是我的解决方案:

mViewFlow.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

当然可以在layout.xml中配置。

希望对你有帮助。

【讨论】:

  • 请描述解决方案。
  • 您好 Parixit,很抱歉这么晚才回复您。我已经写了一篇博客来分析这个异常,这里是链接:cnblogs.com/monodin/p/3675040.html
  • 是中文写的,你可能看不懂。但是解决方案在该博客的末尾,其中包含大量代码,我认为您可以从中获得一些东西。另外,诚邀您与我联系。这是我的电子邮件:dyj_henu@126.com
  • 谢谢。但是个人接触并不可取。除了个人联系之外,最好在这里得到所有答案。
  • TO Parixt:我不能再同意你的看法了。但我每天几乎没有空闲时间翻译它们。从这个周末开始,我将休假两周。之后,我会尽快翻译。
【解决方案2】:

从包含 EditText 的回收站视图中删除项目时,我遇到了同样的问题。就在通知适配器该项目已被删除之前,我使用了

(requireContext() as Activity).currentFocus?.clearFocus()

【讨论】:

    【解决方案3】:

    解决了我添加滚动监听器的问题。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        View currentFocus = ((Activity)mContext).getCurrentFocus();
        if (currentFocus != null) {
            currentFocus.clearFocus();
        }  
    }
    

    【讨论】:

      【解决方案4】:

      这对我有用。

      convertView = mInflater.inflate(R.layout.row_stat_header,
                          parent, false);  
      

      这里parent是getView中的ViewGroup参数。

      【讨论】:

        猜你喜欢
        • 2022-10-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多