Domanda

Non mi sembra di capire se è possibile per gonfiare (includa) un'attività in un'altra attività. So che posso gonfiare un XML di layout, questo funziona, ma mi chiedo se posso gonfiare un'attività. Per esempio, ho classe A che si estende attività e un'altra classe B che si estende ListActivity. Posso includere e l'uso in classe A, la mia classe B? Questo è quello che ho provato:

Classe A:

LayoutInflater inflater = (LayoutInflater) MyActivity.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // inflate list
    BActivity list = new BActivity();

Classe B:

public class BActivity extends ListActivity {
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    List<Model> models= new ArrayList<Model>();
    models.add(new Model("John"));
    models.add(new Model("Cage"));

    setListAdapter(new MyAdapter(this, models));
    ListView list = getListView();
  }
}

e in XML (classe A xml): (per cui voglio vedere l'elenco)

 <view class="com.test.BActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >  </view>

Tutto questo genera errori:

Errore classe gonfiaggio BActivity

Le attività sono dichiarati nel manifesto.

Sai che cosa sto facendo male? questo non è il modo corretto per gonfiare un'altra attività? Sto usando Android 2.2 api 8. Grazie per il vostro tempo.

È stato utile?

Soluzione

Il titolo della domanda e il problema non sono in realtà la stessa cosa. Per completezza, risponderò sia.

Qual è la differenza da gonfiare un'attività e gonfiare una vista in Android?

La risposta è che non c'è alcuna differenza. Infine, sono gli stessi di processo e logica. Tuttavia, un'attività può avere molti punti di vista e si può setContentView() più volte per diversi layout o viste diverse in base alle proprie esigenze. Un attività richiede una risorsa di layout, e una vista può o non può essere un layout.

Sai cosa sto facendo male?

Sì. Assolutamente.

  1. Il tuo codice: BActivity list = new BActivity(); non è in realtà gonfiare un'attività. Si sono costruzione l'attività, ma non avviarlo.
  2. I tuoi definisce XML BActivity come View, ma il codice definisce come un ListActivity. Si tratta di due cose completamente diverse. Un ListActivity ha un ListView (esteso o altro); Un ListActivity non è un ListView.
  3. Activity e le sue sottoclassi sono Contexts che hanno un ciclo di vita che è gestito dal sistema operativo. Essi contengono e parlano a Views di tutti i tipi, ma non sono essi stessi punti di vista.

questo non è il modo corretto per gonfiare un'altra attività?

No, signore, ma non temere! La risposta non è troppo lontano.

  1. FALSO RISPOSTA (per completezza) - In primo luogo, per iniziare un'altra attività in modo che si gonfia, è necessario chiamare startActivity() da un Context. Un Context può essere un'applicazione, Attività, diffusione Reciever o qualsiasi altro componente app (Component = dichiarata oggetto nel manifest progetto Android). Quindi, se si voleva davvero per iniziare una nuova attività, è necessario modificare BActivity list = new BActivity(); a:

    Intent _listActivity = new Intent();
    _listActivity.setClass(BActivity.class);
    startActivity(_listActivity);
    
  2. REAL RISPOSTA - Tuttavia, dal momento che si desidera vedi la vostra lista in classe A, BActivity non è un'attività, si tratta di una vista. Ciò significa che cosa si vuole veramente è quello di rendere riconoscere la vista e questa è una soluzione diversa. Cambiare public class BActivity extends ListActivity a public class BActivity extends ListView e ora tutto ad un tratto si ha una vista personalizzata !! Ora tutto quello che dobbiamo fare è ottenere l'elenco di lavoro.

  3. Costruire il Visualizza - opinioni sono diverse da attività in quanto non hanno un public void onCreate(Bundle bundle). Tutte le tue cose da BActivity.onCreate() sarebbe invece collocato nel costruttore. Ma, non si dispone di una funzione di costruzione appropriata ... hmmm. Beh, ci sono tre costruttori tra cui scegliere - aggiungere uno o tutti i seguenti elementi (Probabilmente si vuole sia l'opzione 1 o 2, in un primo momento, ma non utilizzerà entrambi allo stesso tempo suggerimento. suggerimento, leggere i commenti :

    //This constructor is used when the View is created from code (not XML!!)
    public BActivity(Context context)
    {
    }
    
    //This constructor is used when the View is created from XML (not code!!)
    public BActivity(Context context, AttributeSet attr)
    {
    }
    
    //This constructor is used when the View is created from XML with a Style defined in separate XML.
    public BActivity(Context context, AttributeSet attr, int defStyle)
    {
    }
    
  4. Gonfiare l'Activity = Gonfiare il Visualizza Avete una scelta qui, è possibile Aggiungi la vista, o puoi gonfiare la vista. Ci sono molte opzioni per entrambi. In base alla tua domanda, io supporre che si desidera per gonfiare la vista. Semplicemente cambiare BActivity list = new BActivity(); a setContentView(R.id.MyXML). MyXML, ovviamente, sarebbe il nome del file di layout XML. SetContentView si aprirà l'appropriato View per voi (BActivity) utilizzando il secondo costruttore dal lista di cui sopra.

Comprendere la differenza tra Vista e le Attività è importante. I processi tra loro sono molto simili, ma si hanno uno scopo intrecciato ma separato.

  • Un'attività deve avere una visione.
  • Una vista deve essere in un contesto.
  • Un'attività è un contesto, ma un contesto può anche essere uno dei diversi possibili altre classi.
  • Entrambi possono essere gonfiato con un LayoutInflater
  • Un Activity ha un metodo comodo chiamato setContentView che può gonfiare un intero file XML.
  • A View deve gonfiare ogni vista utilizzando manualmente LayoutInflater object.inflate().
  • Un'attività ha un ciclo di vita. A View ha invece un ciclo di pareggio.

Per ulteriori informazioni, certamente maggiori informazioni sulla sviluppatori Risorse Android. Tuttavia, alcune di queste cose sono apprese solo dalla sperimentazione.

Spero tutto questo ha aiutato!

FuzzicalLogic

Altri suggerimenti

Gonfiaggio mezzi parsing una descrizione XML di un oggetto e di costruire un oggetto Java con gli attributi descritti. Attività non hanno una descrizione dettagliata in XML e quindi nessun punto per gonfiare loro.

E 'possibile inviare l'attività A dall'attività B oppure è possibile utilizzare il nuovo concetto di frammento per combinare più attività secondarie in attività.

A proposito, è possibile definire viste personalizzate (per sottoclasse una delle classi di visualizzazione) e usarlo nei vostri layout XML, basta mettere il percorso completo della classe per esempio nel layout, invece di dire let.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top