2016-07-22 25 views
0

私は、PopupMenuを開くようにCardViewを設定しましたが、何を試してもクラッシュするだけです。ここで Android 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: FATAL EXCEPTION: main Process: com.avena.avenafit, PID: 24031 Theme: themes:{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: Expected receiver of type com.avena.avenafit.onboarding.w, but got android.view.ContextThemeWrapper at java.lang.reflect.Method.invoke(Native Method) at android.view.View$DeclaredOnClickListener.onClick(View.java:4453) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21158) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

私も試してみました設定onClickListener CardView、しかし私にこのエラーを与える:

07-22 17:08:14.297 8834-8834/com.avena.avenafit E/AndroidRuntime: FATAL EXCEPTION: main Process: com.avena.avenafit, PID: 8834 Theme: themes:{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: Binary XML file line #17: Failed to resolve attribute at index 6: TypedValue{t=0x1d/d=0xffffc107 a=3 r=0x7f0d0004} at android.view.LayoutInflater.inflate(LayoutInflater.java:539) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.support.v7.view.menu.w.getView(Unknown Source) at android.support.v7.view.menu.v.i(Unknown Source) at android.support.v7.view.menu.v.f(Unknown Source) at android.support.v7.view.menu.v.d(Unknown Source) at android.support.v7.widget.ea.b(Unknown Source) at com.avena.avenafit.onboarding.x.onClick(Unknown Source) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21158) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5461) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 6: TypedValue{t=0x1d/d=0xffffc107 a=3 r=0x7f0d0004} at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:705) at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:6890) at android.view.ViewGroup$MarginLayoutParams.(ViewGroup.java:7071) at android.widget.FrameLayout$LayoutParams.(FrameLayout.java:446) at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:386) at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:385) at android.view.LayoutInflater.inflate(LayoutInflater.java:502) at android.view.LayoutInflater.inflate(LayoutInflater.java:423)  at android.support.v7.view.menu.w.getView(Unknown Source)  at android.support.v7.view.menu.v.i(Unknown Source)  at android.support.v7.view.menu.v.f(Unknown Source)  at android.support.v7.view.menu.v.d(Unknown Source)  at android.support.v7.widget.ea.b(Unknown Source)  at com.avena.avenafit.onboarding.x.onClick(Unknown Source)  at android.view.View.performClick(View.java:5204)  at android.view.View$PerformClick.run(View.java:21158)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5461)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

誰もこれまでに苦労しましたか?

+0

あなたの問題は、あなたのアプリ/ポップアップのテーマに関係しています。 – TheAnonymous010

+0

それを詳しく教えていただけますか? – herrmartell

+0

エラーの最初の部分は、テーマとIllegalArgumentExceptionについて話しています... java.lang.IllegalArgumentException:タイプcom.avena.avenafit.onboarding.wの受信者が期待されましたが、android.view.ContextThemeWrapper' – TheAnonymous010

答えて

1

最も簡単な解決策:

ちょうど、XMLにonClick属性を使用していないだけで、あなたのcardViewのための定期的なonClickListenerを宣言しsetOnClickListenerを経由して、それを追加します。

編集:他のエラーについては、これが役立つ可能性があります。AppCompat PopUp menu RuntimeException エラーは、スタイル属性が不足している可能性があることを示しています。

+0

があります私の元の質問の最後に読んで、私はすでにそれを試みた。これは異なるエラーを出します。私はここに私の投稿にそれを加えました。 – herrmartell

+0

おそらく、これは役に立ちます:http://stackoverflow.com/questions/28523517/appcompat-popup-menu-runtimeexception?あなたのエラーと非常によく似ているようです。 「インデックス6の属性を解決できませんでした」は、属性が不足していることを示します。 –

+0

@SMartellはこの行を削除しましたか? "android:onClick =" getGender "" setOnClickListener経由でリスナーを設定するとどうなりますか? –

関連する問題