2012-01-16 19 views
5

मेरे सार वर्ग बढ़ाया 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() विधि में मैं सामग्री को देखने के रूप में इस एक्सएमएल लेआउट निर्धारित किया है।

मैं Activity रों जो 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 के 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 पर एक विकल्प देखना है।

+0

बहुत बढ़िया !!! बहुत बहुत धन्यवाद)) – teoREtik

+0

व्यू ग्रुप का उपयोग करने का एक अन्य लाभ यह है कि आप केवल एक ही स्थान पर अपने लेआउट (पृष्ठभूमि, चौड़ाई/ऊंचाई इत्यादि) को संशोधित कर सकते हैं, और आपकी सभी उप-वर्ग गतिविधियों को प्रभावित किया जाएगा – Guillaume

0

आप अगर मैं तुम्हें समझ में आया, जावा में वर्ग डेटा सदस्यों, उपयोग के तरीकों के बजाय

संबंधित मुद्दे