2011-11-11 10 views
5

Attualmente sono in un progetto Android in cui la nostra vista principale è TabActivity e ogni scheda è un'attività separata. Uno è un MapActivity e gli altri due sono attività ordinarie.Azione di fuoco su altre attività all'interno di TabHost? (Android)

Innanzitutto, penso che dobbiamo avere ciascuna scheda come attività separate, poiché c'è troppo codice nelle attività separate per fare in modo che TabHost cambi la visualizzazione del contenuto in una modifica di tabulazione e abbia tutto il codice nello stesso classe. Comunque, torniamo al problema.

Una delle schede include un pulsante, che quando viene premuto deve impostare il parametro TabActivity su MapActivity e animare la mappa in una posizione specifica.

Il tutorial trovato su http://joshclemm.com/blog/?p=86 mostra come farlo se TabHost contiene una mappa e un elenco. Se si fa clic su un elemento in ListView, TabHost passa a mapview e si anima in quella posizione (quelle coordinate). Questo è esattamente ciò che devo fare quando viene premuto il pulsante nell'attività separata.

Il MainView.java viene creato come segue:

public class MainView extends TabActivity implements OnTabChangeListener{ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

intent = new Intent().setClass(this, MapGUI.class); 
    spec = tabHost.newTabSpec("map").setIndicator("Map", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, MissionView.class); 
    spec = tabHost.newTabSpec("mission").setIndicator("Mission", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SIPView.class); 
    spec = tabHost.newTabSpec("call").setIndicator("Call", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

Il MissionView.java è la seguente:

public class MissionView extends Activity implements Observer{ 

MissionController mc; 
private TextView missionheader, missiondescription, missionaddress, 
missiontime, missioninjuries; 
private Button changedesc, gotoadress; 
private String[] mission; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.missiontablayout); 
    missionheader = (TextView)findViewById(R.id.missionheader2); 
    missiondescription = (TextView)findViewById(R.id.missiondescription2); 
    missionaddress = (TextView)findViewById(R.id.missionaddress2); 
    missiontime = (TextView)findViewById(R.id.missiontime2); 
    missioninjuries = (TextView)findViewById(R.id.missioninjuries2); 

    changedesc = (Button)findViewById(R.id.gotoaddress); 
    changedesc.setOnClickListener(new OnClickListener() {   
     public void onClick(View v) { 
     // DO SOMETHING HERE?    
     } 
    }); 
    mc = new MissionController(MissionView.this); 
} 

public void update(Observable observable, Object data) { 
    if(data instanceof String[]){ 
     mission = (String[]) data; 
     updateView(mission); 
    } 
} 
public void updateView(String[] missiontext){ 
    missionheader.setText(missiontext[0]); 
    missiondescription.setText(missiontext[1]); 
    missionaddress.setText(missiontext[2]); 
    missiontime.setText(missiontext[3]); 
    missioninjuries.setText(missiontext[4]); 
} 

}

Qualcuno sa come potrei raggiungere questo obiettivo?

Si noti che il codice fornito sopra non ha alcuna implementazione per disegnare effettivamente nella posizione effettiva, ma la domanda rimane ancora, come faccio a premere un pulsante in una attività per cambiare scheda in TabHost e attivare una modifica in tale scheda attività?

risposta

0

mutevoli schede in un TabHost può essere fatto facilmente con setCurrentTab(int) http://developer.android.com/reference/android/widget/TabHost.html#setCurrentTab(int)

Invio di eventi ad altre attività può essere semplicemente ottenuto mediante l'invio di un intento di trasmissione e la ricezione/gestione nell'altra Activity.

In alternativa è possibile salvare i riferimenti statici a tutte le schede Attività (brutto ...) e chiamare direttamente i metodi.

0

Posizionare la linea in basso a scatto del tasto in cui si desidera passare all'attività Mappa

((MainView) getParent()).setTabMap(); 

e MainView Creare la seguente funzione

public void setTabMap() 
{ 
    //as Map activity is your first tab so pass 0 as index 
    getTabHost().setCurrentTab(0); 
} 
Problemi correlati