Изменение Просмотр содержимого в активности динамически

Мой абстрактный класс, расширенный из класса Activity состоит из трех View как описано в следующем фрагменте XML:

 <?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() и определить onCreate() 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); // ie concrete View (eg LinearLayout, FrameLayout, GridView, etc.) } } 

Но когда я делаю это, мой mContent остается таким же, как и когда я определил его в onCreate() .

Как я могу изменить тип / содержание вида, зависит от того, какая Activity находится на переднем плане?

    Сначала измените представление в своем основном макете на группу представлений (например, 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(); 

    Он работает, я делаю именно это в большинстве своих проектов.

    Альтернативой является просмотр API фрагментов , доступный для последних версий SDK.

    Вы не можете переопределить элементы данных класса в Java, вместо этого используйте методы