【问题标题】:Android PopupMenu keeps crashingAndroid PopupMenu 不断崩溃
【发布时间】:2016-11-26 21:39:26
【问题描述】:

所以我设置了一个 CardView 来打开一个 PopupMenu,但无论我尝试了什么,它都会一直崩溃。

这是 XML:

<android.support.v7.widget.CardView
    android:id="@+id/cardview_gender"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/edittext_height"
    android:layout_marginBottom="25dp"
    android:onClick="getGender"
    android:layout_marginLeft="25dp"
    android:layout_marginRight="25dp"
    app:cardBackgroundColor="@color/colorTransparent"
    app:cardElevation="0dp">

            <TextView
                android:id="@+id/edittext_gender"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hint_gender"
                android:textColor="@color/colorSecondaryText"
                android:textSize="14sp" />

</android.support.v7.widget.CardView>

方法如下:

public void getGender(View view) {

    PopupMenu popupMenu = new PopupMenu(this, view);
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.item_girl:
                    editText_gender.setText(string_boy);
                    return true;
                case R.id.item_boy:
                    editText_gender.setText(string_girl);
                    return true;
                default:
                    return true;
            }
        }
    });
    popupMenu.inflate(R.menu.gender_menu);
    popupMenu.show();

}

当然,这是错误日志:

07-22 16:40:04.299 24031-24031/com.avena.avenafit E/AndroidRuntime: 致命异常: main 进程:com.avena.avenafit,PID:24031 主题:主题:{default=overlay:com.materialos.cm.theme, iconPack:com.launchertheme.kxnt.pop, fontPkg:com.materialos.cm.theme, com.android.systemui=overlay:com.materialos.cm .theme, com.android.systemui.navbar=overlay:com.materialos.cm.theme} java.lang.IllegalArgumentException:com.avena.avenafit.onboarding.w 类型的预期接收者,但得到了 android.view.ContextThemeWrapper 在 java.lang.reflect.Method.invoke(本机方法) 在 android.view.View$DeclaredOnClickListener.onClick(View.java:4453) 在 android.view.View.performClick(View.java:5204) 在 android.view.View$PerformClick.run(View.java:21158) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5461) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我也尝试在 CardView 上设置 onClickListener,但它给了我这个错误:

07-22 17:08:14.297 8834-8834/com.avena.avenafit E/AndroidRuntime: 致命异常: main 进程:com.avena.avenafit,PID:8834 主题:主题:{default=overlay:com.materialos.cm.theme, iconPack:com.launchertheme.kxnt.pop, fontPkg:com.materialos.cm.theme, com.android.systemui=overlay:com.materialos.cm .theme, com.android.systemui.navbar=overlay:com.materialos.cm.theme} android.view.InflateException:二进制 XML 文件第 17 行:无法解析索引 6 处的属性:TypedValue{t=0x1d/d=0xffffc107 a=3 r=0x7f0d0004} 在 android.view.LayoutInflater.inflate(LayoutInflater.java:539) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.support.v7.view.menu.w.getView(未知来源) 在 android.support.v7.view.menu.v.i(未知来源) 在 android.support.v7.view.menu.v.f(未知来源) 在 android.support.v7.view.menu.v.d(未知来源) 在 android.support.v7.widget.ea.b(未知来源) 在 com.avena.avenafit.onboarding.x.onClick(未知来源) 在 android.view.View.performClick(View.java:5204) 在 android.view.View$PerformClick.run(View.java:21158) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5461) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.UnsupportedOperationException:无法解析索引 6 处的属性:TypedValue{t=0x1d/d=0xffffc107 a=3 r=0x7f0d0004} 在 android.content.res.TypedArray.getLayoutDimension(TypedArray.java:705) 在 android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:6890) 在 android.view.ViewGroup$MarginLayoutParams.(ViewGroup.java:7071) 在 android.widget.FrameLayout$LayoutParams.(FrameLayout.java:446) 在 android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:386) 在 android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:385) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:502) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.support.v7.view.menu.w.getView(未知来源) 在 android.support.v7.view.menu.v.i(未知来源) 在 android.support.v7.view.menu.v.f(未知来源) 在 android.support.v7.view.menu.v.d(未知来源) 在 android.support.v7.widget.ea.b(未知来源) 在 com.avena.avenafit.onboarding.x.onClick(未知来源) 在 android.view.View.performClick(View.java:5204) 在 android.view.View$PerformClick.run(View.java:21158) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5461) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

以前有人遇到过这个问题吗?

【问题讨论】:

  • 您的问题与您的应用/弹出窗口的主题有关。
  • 您能详细说明一下吗?
  • 错误的第一部分是关于主题和 IllegalArgumentException...java.lang.IllegalArgumentException: Expected receiver of type com.avena.avenafit.onboarding.w, but got android.view.ContextThemeWrapper

标签: android popupmenu


【解决方案1】:

最简单的解决方案:

只是不要在 XML 中使用 onClick 属性,只需为您的 cardView 声明一个常规的 onClickListener 并通过 setOnClickListener 添加它。

编辑:关于另一个错误,这可能会有所帮助:AppCompat PopUp menu RuntimeException 该错误表明可能缺少某些样式属性。

【讨论】:

  • 正如您在我最初的问题末尾看到的那样,我已经尝试过了。它给出了不同的错误。我已将其添加到我的帖子中。
  • 也许这个有帮助:stackoverflow.com/questions/28523517/…?似乎与您的错误非常相似。 “无法解析索引 6 处的属性”表示缺少某些属性。
  • @S.Martell 当您通过 setOnClickListener 设置侦听器时,您是否删除了这一行“android:onClick="getGender"”?
  • @AlexeyRogovoy 我做到了。
  • @S.Martell 您能否提供一个引发 InflateException 的完整布局 xml 文件?
猜你喜欢
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2013-03-26
相关资源
最近更新 更多