2016-01-13 20 views
5

Ho bisogno di iniziare un'attività da 2 schermi diversi che hanno due modelli diversi ma, entrambi i modelli hanno alcune informazioni condivise che è quella che ho bisogno nella nuova attività. Il problema è che non riesco a fare in modo che quei modelli si estendano dallo stesso genitore, poiché uno dei modelli estende già un genitore. Ho pensato di creare un'interfaccia che contenga i metodi condivisi ma, se lo faccio, come posso inserire quell'interfaccia nel pacchetto richiesto per avviare la prossima attività?Metti l'interfaccia in bundle per iniziare una nuova attività

aggiungo un po 'di codice semplificato al fine di chiarire la mia situazione:

public class A extends Model implements CustomInterface { 
    String name; 
    String address; 

    public String getName(){ 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 
} 

public class B implements CustomInterface { 
    String name; 

    public String getName() { 
     return name; 
    } 
} 

public interface CustomInterface { 
    String getName(); 
} 

Il mio problema è che ho bisogno di iniziare un'attività con un bundle con le informazioni condivise tra i due modelli. Quindi, vorrei mettere CustomInterface in un pacchetto. Come potrei farlo?

Grazie in anticipo.

+1

NON penso che sia necessario inserire l'interfaccia in un pacchetto. Quando le attività che avviano la seconda attività hanno i dati, è necessario inviare i dati e NON l'interfaccia. L'interfaccia è un mezzo per consentire all'utente di dire che la classe sarà conforme a una determinata specifica quando implementa l'interfaccia. –

+1

Penso che sia necessario ripensare all'architettura dell'applicazione perché vedo che c'è un problema serio. Ad ogni modo, se hai bisogno di passare le informazioni in un pacchetto verso un'altra attività, puoi metterle facilmente prima di iniziare l'attività. Dal costruttore dell'attività lanciata verifica se il pacchetto esiste e quindi definisci le azioni di conseguenza. C'è un altro modo per archiviare i dati e recuperare le attività. Dichiarare una variabile statica pubblica e quindi memorizzare i dati che verranno trasportati durante il ciclo di vita dell'applicazione. Spero possa aiutare. –

risposta

11

Quindi, vorrei mettere CustomInterface in un fascio

si potrebbe lasciare che CustomInterface estendono Parcelable. Per esempio.

public interface CustomInterface extends Parcelable { 
    String getName(); 
} 

questo modo le classi di attuazione CustomInterface dovranno implementa il metodo definito nell'interfaccia Parcelable. Se attuata correttamente, si sarà in grado di passare gli oggetti in giro senza problemi

+1

Esattamente, e quando recuperi Parcelable I la tua attività, puoi lanciarla sulla tua interfaccia. – Desdroid

+0

Non sono sicuro del motivo per cui, nel mio caso, utilizzando il servizio, ho ricevuto un avviso ** W/ActivityManager: servizio in esecuzione Timeout ** seguito da un errore ** E/ActivityManager: ANR in site.xplor.player ** perché '.getParcelableExtra (KEY) 'viene eseguito con timeout – HKoncept

0

Creare una classe Singleton, allora è possibile condividere i dati senza passare è:

public class MySingleton 
{ 
    private static MySingleton instance; 

    public String customVar; 

    public static MySingleton getInstance() 
    { 
     if (instance == null) 
     { 
      // Create the instance 
      instance = new MySingleton(); 
     } 
     // Return the instance 
     return instance; 
    } 

    private MySingleton() 
    { 
     // Constructor hidden because this is a singleton 
    } 

    public void getSomeData() 
    { 
     return something; 
    } 

    public void getSomeOtherData() 
    { 
     return somethingelse; 
    } 
} 

Poi nelle classi:

public class A extends Model { 
    String name; 
    String address; 

    public String getName(){ 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public String doSomethingWithSharedData(){ 
     MySingleton model = MySingleton.getInstance(); 
     String somedata = model.getSomeData(); 
    } 
} 

public class B { 
    String name; 


    public String getName() { 
     return name; 
    } 

    public String doSomethingDifferentWithSharedData(){ 
     MySingleton model = MySingleton.getInstance(); 
     String somedata = model.getSomeOtherData(); 
    } 
} 
+0

Il mantenimento dei dati statici deve essere evitato a meno che non sia necessario per l'intera durata del processo. Per il passaggio di dati tra attività, l'api Android fornisce è raccomandato. –