Thursday, January 12, 2012

Activity Template

Stiamo sviluppando la nostra applicazione Android e vogliamo che nelle nostre activity abbiano, per esempio, un header fisso e ovviamente non abbiamo intenzione di copia-incollare il codice in ognuna activity? Questo post vi può aiutare :)

Se ci pensiamo un secondo è una cosa banale: alla base della programmazione ad oggetti. L'ereditarietà.

Ci basta creare un activity contenitore con il nostro header definito e una "zona da riempire" (un layout vuoto).
Le activity che dovranno visualizzare il famoso header dovranno solo ereditare la classe dell'activity contenitore. L'unica cosa in più che dobbiamo preoccuparci di fare è l'override nel container del setContentView metodo in cui andremo a dire che il contenuto va immesso nel layout da noi indicato.

Guardiamo intanto il layout del container:

<LinearLayout android:gravity="fill" 
              android:layout_height="fill_parent" 
              android:layout_width="fill_parent" 
              android:orientation="vertical" 
              xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout android:background="@color/fillColor" 
                  android:gravity="center_horizontal|center_vertical"  
                  android:id="@+id/linearLayout1"  
                  android:layout_height="wrap_content" 
                  android:layout_weight="0.09" 
                  android:layout_width="match_parent">
                        <ImageView android:id="@+id/iHeader"  
                                   android:layout_height="wrap_content" 
                                   android:layout_width="wrap_content" 
                                   android:src="@drawable/title_network">
                        </ImageView>
    </LinearLayout>

   <ScrollView android:id="@+id/scrollView1" 
               android:layout_height="110dp" 
               android:layout_weight="0.74" 
               android:layout_width="match_parent">

   <LinearLayout android:id="@+id/llChildActivityHere" 
                 android:layout_height="match_parent" 
                 android:layout_width="match_parent" 
                 android:orientation="vertical" 
                 android:padding="30dip">
   </LinearLayout>
   
   </ScrollView >
</LinearLayout>

Qui il codice dell'Activity contenitore.
import android.app.Activity;
import android.view.LayoutInflater;
import android.widget.LinearLayout;

public class MasterActivity extends Activity 
{
 LinearLayout llChildActivityHere;
 
 public void onCreate(Bundle savedInstanceState) 
 {
     super.onCreate(savedInstanceState);
     super.setContentView(R.layout.container);
  
     llChildActivityHere = (LinearLayout)findViewById(R.id.llChildActivityHere);
  
 } 
 
 @Override
 public void setContentView(int id) 
 {
     LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     inflater.inflate(id, linBase);
 }
}

E come già accennato, le varie activity che vanno a riempire non dovranno fare altro che questo:
public class DetailActivity extends MasterActivity
{
 //....
}

E il gioco è fatto,enjoy your code :)

No comments:

Post a Comment