2012-01-16 2 views
5

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

<?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 остаются такими же, как это было, когда я определил его в MyActivity «s onCreate().

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

+0

Привет, Если бы я хорошо понимал, что вы хотите иметь шаблон с некоторой фиксированной верстки и некоторой dinamyc. Если это так, я рекомендую вам использовать фрагменты. –

ответ

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(); 

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

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

+0

Удивительный !!! Большое вам спасибо))) – teoREtik

+0

Еще одно преимущество использования ViewGroup заключается в том, что вы можете изменить его макет (фон, ширина/высота и т. Д.) Только в одном месте, и все действия вашего подкласса будут затронуты – Guillaume

0

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

Смежные вопросы