0

私は root_layout を持っています:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/background"
android:weightSum="10">

    <FrameLayout
        android:id="@+id/parentViewHolder"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_weight="8"
        android:background="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent" >
    </FrameLayout>

    <TextView
        android:id="@+id/spaceHolder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="TEXT">
    </TextView>

画面を変更するたびに、これらのレイアウトが使用され、他の宣言されたlayout.xmlで埋められるようになりました

使ってみた

    protected void Setup(int _layoutResourceId) 
{ 
    layoutResourceId = _layoutResourceId;
    FrameLayout holder = (FrameLayout) activity.findViewById(R.id.parentViewHolder);

    LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    holder.addView(layoutInflater.inflate(layoutResourceId, null, false)); 
    activity.screen = this;
}

しかし、これはうまくいきませんでした。より良い実装を知っている人はいますか?

4

3 に答える 3

1

次のようにレイアウトを再利用できます。

まず、問題で説明されているようなレイアウトを実装します。たとえば、ファイル名はroot_layout.xmlです。

次に、それを別のビューで使用する場合は、これをxmlファイルに追加するだけです。

<include layout="@layout/root_layout"></include>

そして、root_layoutは別のレイアウトに拡張されます。

root_layoutのすべての属性が保持されていることに注意してください。だからそれらに注意を払ってください。

于 2012-06-14T14:52:21.910 に答える
1

どのように機能しないかは言わなかったので、画面に両方のビューが残っていると仮定します...使用する必要がありますremoveAllViews().

これを試して:

protected void Setup(int _layoutResourceId)  
{  
    layoutResourceId = _layoutResourceId; 
    FrameLayout holder = (FrameLayout) activity.findViewById(R.id.parentViewHolder); 
    holder.removeAllViews();  
    LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService (Context.LAYOUT_INFLATER_SERVICE);     
    holder.addView(layoutInflater.inflate(layoutResourceId, null, false));  
    activity.screen = this; 
} 
于 2012-06-14T14:53:48.467 に答える
1

投稿したレイアウトとは別のレイアウトを追加する場合FrameLayoutは、次のようにします。

protected void Setup(int _layoutResourceId) { 
    layoutResourceId = _layoutResourceId;
    FrameLayout holder = (FrameLayout) activity.findViewById(R.id.parentViewHolder);
    holder.removeAllViews();
    LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    layoutInflater.inflate(layoutResourceId, holder, true)); 
    activity.screen = this;
}
于 2012-06-14T14:56:30.337 に答える