2012-01-16 126 views
5

我的抽象類擴展從Activity類包括如下面的XML片段描述了三個View S:更改視圖內容動態

<?xml version="1.0" encoding="utf-8"?> 
<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/bg"> 

    <LinearLayout 
     android:id="@+id/top_border"> 
     ... 
    </LinearLayout> 

    <View 
     android:id="@+id/activity_content" 
     ... 
     /> 

    <LinearLayout 
     android:id="@+id/bottom_border"> 
     ...   
    </LinearLayout> 
</LinearLayout> 

而在onCreate()方法我設置XML佈局爲內容視圖。

我想Activity s擴展這一個覆蓋onCreate()並在那裏定義剩餘的邊界不變的activity_content View

例如像這樣:

abstract public class MyActivity extends Activity { 
    protected View mContent; 

    @Override 
    protected onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.common_layout); 
     initializeContent(); 
    } 

    abstract void initializeContent(); 
} 

class OneActivity extends MyActivity { 

    @Override 
    protected void initializeContent() { 
     mContent = View.inflate(this, R.layout.some_view, null); // i.e. concrete View (e.g. LinearLayout, FrameLayout, GridView, etc.) 
    } 
} 

但是,當我這樣做,我mContent保持原樣,當我在MyActivityonCreate()其定義是相同的。

如何更改視圖的類型/內容取決於Activity在前臺?

+0

嗨,如果我理解你,你要清楚什麼是有一些固定的佈局和一些dinamyc的模板。如果是這樣,我鼓勵你使用碎片。 – 2013-11-06 21:43:51

回答

7

首先將主佈局中的視圖更改爲視圖組(例如,LinearLayout)。那麼你可以給添加看法。如果添加一個獨特的視圖,它將具有您想要達到的效果。

class OneActivity extends MyActivity { 
    @Override 
    protected void initializeContent() { 
     final ViewGroup viewGroup = (ViewGroup) findViewById(R.id.activity_content); 
     viewGroup.addView(View.inflate(this, R.layout.some_view, null)); 
    } 
} 

在你的情況下,應該工作。如果您的自定義視圖組包括從層級越往上其他視圖,您可以添加自定義視圖之前清潔:

viewGroup.removeAllViews(); 

它的工作原理,我做的正是在我的大多數項目。

另一種方法是查看可用於最新版本SDK的Fragments API

+0

太棒了!非常感謝你))) – teoREtik 2012-01-16 14:14:38

+0

使用ViewGroup的另一個好處是你只能在一個地方修改它的佈局(背景,寬度/高度等),並且所有的子類活動都會受到影響 – Guillaume 2012-01-16 14:30:00

0

您不能覆蓋的Java類的數據成員,使用方法,而不是