【发布时间】: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