Autore Topic: TabHost - StartChildActivity Di un'activity figlia.  (Letto 417 volte)

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
TabHost - StartChildActivity Di un'activity figlia.
« il: 21 Maggio 2013, 13:21:12 CEST »
0
Ciao a tutti ragazzi. Nel mio nuovo problema probabilmente è una cosa sciocca ma non riesco a risolverla da ore.

Io ho una tab di 5 elementi che startano 5 diverse activity.

Per esempio una di queste, la prima fa partire la classe: TabGroupCustumizedListViewActivity



Codice (Java): [Seleziona]
public class TabGroupCustomizedListViewActivity extends TabGroupActivity1{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("OptionsActivity", new Intent(this,CustomizedListView.class));
    }
}

Questa a sua volta fa partire la classe CustomizedListView che mostra una lista di elementi. Infine mostra anche la tab bar in fondo.

La mia classe TabGroupCustomizedListViewActivity  estende TabGroupActviity1

Codice (Java): [Seleziona]
package it.anomos.shopandsave.FirstActivityPackage;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ActivityGroup;
import android.app.LocalActivityManager;

import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;

/**
 * The purpose of this Activity is to manage the activities in a tab.
 * Note: Child Activities can handle Key Presses before they are seen here.
 * @author Eric Harlow
 */

public class TabGroupActivity1 extends ActivityGroup {

    private ArrayList<String> mIdList;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);      
        if (mIdList == null) mIdList = new ArrayList<String>();
    }
 
    /**
     * This is called when a child activity of this one calls its finish method.
     * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity
     * and starts the previous activity.
     * If the last child activity just called finish(),this activity (the parent),
     * calls finish to finish the entire group.
     */

  @Override
  public void finishFromChild(Activity child) {
      LocalActivityManager manager = getLocalActivityManager();
      int index = mIdList.size()-1;
     
      if (index < 1) {
          finish();
          return;
      }
         
      manager.destroyActivity(mIdList.get(index), true);
      mIdList.remove(index); index--;
      String lastId = mIdList.get(index);
      Intent lastIntent = manager.getActivity(lastId).getIntent();
      Window newWindow = manager.startActivity(lastId, lastIntent);
      setContentView(newWindow.getDecorView());
  }
 
  /**
   * Starts an Activity as a child Activity to this.
   * @param Id Unique identifier of the activity to be started.
   * @param intent The Intent describing the activity to be started.
   * @throws android.content.ActivityNotFoundException.
   */

  public void startChildActivity(String Id, Intent intent) {    
      Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
      if (window != null) {
          mIdList.add(Id);
          setContentView(window.getDecorView());
      }    
  }
 
  /**
   * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR
   * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown.
   */

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
          return true;
      }
      return super.onKeyDown(keyCode, event);
  }

  /**
   * Overrides the default implementation for KeyEvent.KEYCODE_BACK
   * so that all systems call onBackPressed().
   */

  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          onBackPressed();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }
 
  /**
   * If a Child Activity handles KeyEvent.KEYCODE_BACK.
   * Simply override and add this method.
   */

  @Override
  public void  onBackPressed  () {
      int length = mIdList.size();
      if ( length > 1) {
          Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
          current.finish();
      }  
  }
}

Fin qui tutto bene!!!

Ora se clicco un elemento della lista utilizzo il seguente codice:

Codice (Java): [Seleziona]
                                    Intent previewMessage = new Intent(getParent(), ListaStore.class);
                                    TabGroupActivity1 parentActivity = (TabGroupActivity1)getParent();
                                    parentActivity.startChildActivity("ListaStore", previewMessage);

E mi apre la classe ListaStore e mostra correttamente la tab bar perchè è figlia diretta di CustomizedListView. Ovviamente all'interno dell'onCreate della classe ListaStore ho inserito la righetta per ricevere l'intent:

Codice (Java): [Seleziona]
            Intent previewMessage = getIntent();
            Bundle b = previewMessage.getExtras();

Fin qui ancora tutto perfetto! Funziona tutto ma..................
Ora ho bisogno di startare un'altra activity PaginaDettaglio (figlia) di ListaStore e quindi "nipotina" di CustomizedListView mostrando l'activity PaginaDettaglio e la TabBar sotto. Non riesco a dirgli che è figlia di figlia e non saprei come fare.

Idee????:-o :-o :-o :-o :-o :-o :-o