2012-01-16 7 views
5

lớp trừu tượng của tôi kéo dài từ Activity lớp bao gồm ba View s như mô tả trong đoạn mã XML sau:Change Xem nội dung trong hoạt động tự động

<?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> 

Và trong onCreate() phương pháp tôi đặt này XML-bố trí như xem nội dung.

Tôi muốn số Activity s mở rộng số này để ghi đè onCreate() và xác định các biên giới còn lại activity_content View không thay đổi.

Ví dụ như thế này:

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.) 
    } 
} 

Nhưng khi tôi làm như vậy mContent của tôi vẫn như cũ vì nó là khi tôi định nghĩa nó trong MyActivity 's onCreate().

Làm cách nào để thay đổi loại/nội dung của chế độ xem phụ thuộc vào những gì Activity ở tiền cảnh?

+0

Xin chào, Nếu tôi hiểu rõ bạn muốn có mẫu nào với bố cục cố định và một số dinamyc. Nếu như thế này, tôi khuyến khích bạn sử dụng Fragments. –

Trả lời

7

Đầu tiên thay đổi chế độ xem trong bố cục chính của bạn thành một nhóm xem (ví dụ: LinearLayout). Sau đó, bạn có thể thêm lượt xem vào số. Nếu bạn thêm một khung nhìn duy nhất, nó sẽ có chính xác hiệu ứng bạn muốn đạt được.

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

Trong trường hợp của bạn sẽ hoạt động. Nếu nhóm giao diện tùy chỉnh của bạn chứa quan điểm khác từ lên cao hơn trong hệ thống phân cấp, bạn có thể làm sạch nó trước khi thêm giao diện tùy chỉnh của bạn:

viewGroup.removeAllViews(); 

Nó hoạt động, tôi làm chính xác điều đó ở hầu hết các dự án của tôi.

Cách khác là xem Fragments API, có sẵn cho các phiên bản SDK mới nhất.

+0

Tuyệt vời !!! Cảm ơn bạn rất nhiều))) – teoREtik

+0

Một lợi ích khác của việc sử dụng ViewGroup là bạn có thể sửa đổi bố cục của nó (nền, chiều rộng/chiều cao, vv) chỉ ở một nơi và tất cả các hoạt động lớp con của bạn sẽ bị ảnh hưởng – Guillaume

0

Bạn không thể ghi đè thành viên dữ liệu lớp trong Java, sử dụng phương thức thay thế