0

これまでLinearLayoutやandroid.support.v7.widget.CardViewを拡張してカスタムビューを作成していましたが、android.supportから拡張すると動作しないようです。 v7.widget.AppCompatSpinner。なぜ私はこの特定のクラスのための問題であるか分からないので、私は何かを見落とさなければならない。AppCompatSpinnerを拡張すると、android.view.InflateExceptionが発生する

私は次のクラスCustomSpinner

public class CustomSpinner extends android.support.v7.widget.AppCompatSpinner { 

    public CustomSpinner(Context context) 
    { 
     this(context, null); 
    } 

    public CustomSpinner(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(context, attrs, 0); 
    } 

    public CustomSpinner(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(context, attrs, defStyle); 
    } 

    private void init(Context context, AttributeSet attrs, int defStyle) 
    { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     inflater.inflate(R.layout.view_custom_spinner, this); 
    } 
} 

そしてR.layout.view_custom_spinner

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.AppCompatSpinner 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/view_custom_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="@dimen/minimum_clickable_area" 
    android:gravity="center_vertical"/> 

を持っていると私は(このような 'MyFragment' のライン#11を別のレイアウトでカスタムコンポーネントを使用しますスタックトレースで述べた):

<my.custom.namespace.CustomSpinner 
    android:id="@+id/view_spinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

奇妙なことは、 LinearLayoutのCustomSpinnerクラスはすべて正常に動作しており、InflateExceptionを取得しません。

私は、次のスタックトレースを取得する:

java.lang.RuntimeException: Unable to start activity ComponentInfo{my.custom.namespace.MyActivity}: android.view.InflateException: Binary XML file line #8: Binary XML file line #11: Error inflating class my.custom.namespace.CustomSpinner 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3320) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416) 
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:7407) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                     Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file line #11: my.custom.namespace.CustomSpinner 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:551) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183) 
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819) 
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) 
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590) 
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377) 
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332) 
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239) 
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231) 
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181) 
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192) 
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572) 
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177) 
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258) 
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266) 
                     at android.app.Activity.performStart(Activity.java:6943) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class my.custom.namespace.CustomSpinner 
                     at android.view.LayoutInflater.createView(LayoutInflater.java:657) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001) 
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:843) 
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183)  
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)  
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)  
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)  
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)  
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)  
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)  
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)  
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)  
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)  
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)  
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258)  
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266)  
                     at android.app.Activity.performStart(Activity.java:6943)  
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)  
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: java.lang.reflect.InvocationTargetException 
                     at java.lang.reflect.Constructor.newInstance(Native Method) 
                     at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)  
                     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)  
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)  
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)  
                     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001)  
                     at android.view.LayoutInflater.rInflate(LayoutInflater.java:843)  
                     at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:527)  
                     at android.view.LayoutInflater.inflate(LayoutInflater.java:429)  
                     at my.custom.namespace.MyFragment.onCreateView(MyFragment.java:183)  
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)  
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)  
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)  
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)  
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)  
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)  
                     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)  
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)  
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)  
                     at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)  
                     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)  
                     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)  
                     at my.custom.namespace.BaseActivity.onStart(BaseActivity.java:258)  
                     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266)  
                     at android.app.Activity.performStart(Activity.java:6943)  
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)  
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)  
                     at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:7407)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
                     Caused by: android.view.InflateException: Binary XML file l 
+0

'過去にLinearLayoutやandroid.support.v7.widget.CardView'を拡張してカスタムビューを正常に作成しました。それは奇妙に聞こえます。あなたはスタックトレースを投稿できますか? – azizbekian

答えて

1

あなたはスピナーのレイアウトを膨らませている理由私は得ることはありません。スピナーは独自のレイアウトを持っていますので、内部にスピナーを持つxmlを作成する必要はありません。線形レイアウトの場合は、ViewGroupであり、カスタムビュークラス内で線形レイアウトの子をバインドすることができますが、スピナーの場合はカスタムビュー属性を使用してレイアウトを編集します。 要約すると、スピナーレイアウトに子供を追加することはできないため、カスタムxmlを展開するのは意味がありません。コードから LayoutInflater inflater = LayoutInflater.from(context); inflater.inflate(R.layout.view_custom_spinner, this); を単に削除すると、スピナーを拡張する完全に働くクラスになります。

+1

ここで、minHeightとgravityをプログラムで追加するだけでいいです。私はおそらく別のCardViewにCardViewを追加しているので、カスタムCardViewのための私のソリューションを再訪する必要があります。 – Wirling

+0

ええ、おそらくあなたはCardViewで同じアプローチを使用する必要があります –

関連する問題