2012-07-20 4 views
7

私のアプリでは、スピナーを持っています。ViewStub、スピナーのユーザーアイテムの選択に応じて、さまざまなレイアウトを膨張させ、スピナー。私のアプリが起動すると、ViewStubはスピナーからアイテムを初めて選択したときにレイアウトをうまく膨らませます。私はスピナーから新しいアイテムを選択しようとすると私のコードは、これまでViewStubは条件付きで複数のレイアウトを展開する際にエラーを発生させます

@Override 
public void onItemSelected(AdapterView<?> pParent, View pView, int pPosition, long pId) { 

if(pPosition == 1){ 
    m_cStub.setLayoutResource(R.layout.text_form); 
}else if(pPosition == 2){ 
    m_cStub.setLayoutResource(R.layout.integer_form); 
} 
View inflated = m_cStub.inflate(); 
} 

m_cStubはのonCreate(内部で作成されたViewStubオブジェクトである)のある

java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent 

の下に、それは例外を発生させますアクティビティ。

は、ここで私が間違っているつもりだところ、誰もが私に教えてくださいすることができ、私のメインのレイアウトXMLコード

<RelativeLayout..................> 
    <spinner......................./> 

    <ViewStub android:id="@+id/dynamic_form_layout" 
    android:inflatedId="@+id/dynamic_form_inflated_id" 
    android:layout_alignParentBottom="true" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 
</RelativeLayout> 

です。これを解決する他の解決策がある場合は、共有してください。

ありがとうございました。

+0

これは、この 'pView = m_cStub.inflate();' – MAC

+0

@ gtumca-MACを試してみてください。エラーはViewでないViewStubであるため動作しません。 –

答えて

22

ViewStubは、このようなシナリオで使用するようには設計されていません。スタブが膨張した後、スタブはビュー階層からが削除されてになります。だからこそ親はなく、IllegalStateExceptionが挙げられている。 ViewStubは複数回使用できません。また、ViewStubへの長寿命の参照を必要としない場合は、それが必要であれば、膨らんだ後にnullにするのが良い慣行なので、GCはそれを食べることができます。

ビューを置き換えるには、addView()/removeView()を使用することを検討してください。または、より良い使用ViewFlipper

関連する問題