5

Possiedo un'app che contiene informazioni sui post in un'attività. in questa attività relativi post elencati in fondo al post. L'utente facendo clic sul relativo post può andare all'attività post e vedere anche quelle post e i post correlati.Apertura istanza di attività

Figure

Come si può vedere nell'immagine, ho Attività Un che tiene messaggio e sta Related Posts. Quando l'utente fa clic su un post, invio l'utente all'attività con un nuovo ID post e riempie l'attività con nuovi dati.

Ma penso che questo non sia il modo giusto!

devo utilizzare Fragment anziché Activity?

+0

Se fossi in te io uso il frammento. perché in genere la pagina dei dettagli viene ripetuta in diverse parti dell'applicazione, in modo da migliorare la riusabilità del codice. – Amir

+0

@Amir Yep! cosa sto considerando ora, è quello di creare un'attività denominata 'PostActivity' che contiene' PostFragment' e quindi creare un'interfaccia per sostituire il frammento per l'attività. Qual è la tua idea al riguardo? – MAY3AM

+0

Sì, questo è un buon modo. Ma non capisco perché hai bisogno di un'interfaccia? – Amir

risposta

0

sceglierei:

attività/frammento dipende complessità:

  • recyclerview orizzontale personalizzata espanso vista carta
  • e all'interno di questa scheda di visione espansa secondo recyclerview verticale :)
0

Ecco cosa puoi provare.

Creare un PostActivity che è una shell per i frammenti. All'interno di questa attività puoi semplicemente sostituire i frammenti usando FragmentTransaction.

Il tuo PostActivity può ora avere un PostFragment che manterrà post e post correlati. Ora al clic del post è possibile sostituire PostFragment con PostDetailFragment con postID inviato al nuovo frammento come pacchetto. Il PostDetailFragment ora mostrerà i dettagli secondo l'id.

Controllare qui: http://www.vogella.com/tutorials/Android/article.html#components_fragments

0

Vedendo l'immagine del modo in cui avrei implementare è che avrei dovuto creare un'attività con un controllo ListView fondo per i tuoi articoli e in cima ci sarebbe un framelayout per lo svolgimento di frammenti. quando l'utente fa clic su qualsiasi elemento dell'elenco, caricare il rispettivo frammento nell'attività

0

Tutto dipende da ciò che si sta tentando di ottenere. Cosa ti aspetti che succeda quando l'utente tocca il pulsante indietro dopo aver abbassato un paio di livelli? Se si desidera che l'applicazione esca, indipendentemente dalla profondità della sequenza, la soluzione migliore secondo me è semplicemente ricaricare la stessa attività con i nuovi dati e invalidere le visualizzazioni interessate. Se hai bisogno del pulsante Indietro per riportare l'utente ai dati precedenti, la domanda successiva sarebbe se stai tenendo traccia del passato breadcrumb dei dati. In tal caso, basta intercettare il pulsante Indietro e caricare i dati precedenti finché ci sono dati nello stack, o uscire se si arriva in cima. Se non si desidera tenere traccia della catena di dati precedente, invece di caricare un'attività con i nuovi dati, è possibile avviare una nuova attività della stessa classe, ma con i nuovi dati. Android con tenere traccia delle attività e ogni pulsante indietro tocco chiudere l'attività in esecuzione e portare l'utente all'attività precedente. La scelta dell'attività rispetto al frammento è solo tua. Puoi utilizzare i frammenti che contengono i dati che desideri modificare dopo ogni tocco di un utente, crearne di nuovi quando necessario, scollegare quelli precedenti e connetterne di nuovi. Dovrai fare del lavoro extra per assicurarti che il pulsante Indietro funzioni correttamente (a seconda del comportamento del pulsante Indietro).Sulla base di ciò che posso dire, è più semplice avere un'attività e caricare nuovi dati quando necessario e tenere una scia di cambiamenti di dati, se è necessario essere in grado di tornare indietro.

1

L'apertura di un'altra istanza di un'attività su un'altra è il modo più semplice di navigare in un grafico di contenuto. L'utente può semplicemente tornare indietro e andare al contenuto precedentemente aperto, fino a quando l'utente non torna indietro per avviare l'attività, quindi l'applicazione si chiude. Anche se piuttosto semplice, questo particolare approccio ha due problemi:

  1. Può accadere che un sacco di istanze di stessa attività sono sullo stack, utilizzando una grande quantità di risorse del dispositivo come la memoria.

  2. Non si dispone di un controllo a grana fine su Stack attività. È possibile avviare solo più attività, finirne, o devono ricorrere alle bandiere intenti come FLAG_CLEAR_TOP ecc

C'è un altro approccio, che ri-utilizza la stessa istanza di attività, i carichi nuovi contenuti in esso, mentre anche ricordare la cronologia del contenuto che è stato caricato. Molto simile a un browser web con gli URL delle pagine web.

L'idea è di mantenere uno Stack contenuto visualizzato finora. Il caricamento di nuovi contenuti spinge più dati da impilare, mentre torna indietro apre il contenuto principale dallo stack, finché non è vuoto. L'interfaccia utente delle attività mostra sempre il contenuto dall'alto dello stack.

grezzo Esempio:

public class PostActivity extends AppCompatActivity { 
    // keep history of viewed posts, with current post at top 
    private final Stack<Post> navStack = new Stack<>(); 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // get starting link from intent extras and call loadPost(link) 
    } 

    private void loadPost(String link){ 
     // Load post data in background and then call onPostLoaded(post) 
     // this is also called when user clicks on a related post link 
    } 

    private void onPostLoaded(Post post){ 
     // add new post to stack 
     navStack.push(post); 

     // refresh UI 
     updateDisplay(); 
    } 

    private void updateDisplay(){ 

     // take the top Post, without removing it from stack 
     final Post post = navStack.peek(); 

     // Display this post data in UI 
    } 

    @Override 
    public void onBackPressed() { 
     // pop the top item 
     navStack.pop(); 

     if(navStack.isEmpty()) { 
      // no more items in history, should finish 
      super.onBackPressed(); 
     }else { 
      // refresh UI with the item that is now on top of stack 
      updateDisplay(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     // cancel any background post load, release resources 
    } 
} 
0

Esso può essere realizzato utilizzando alone attività. Anche se ho preferito spostare tutta la UI correlata al frammento.

È possibile utilizzare la classe Navigator.

Ecco i passi:
1. Aggiungere Navigator Class

public class Navigator { 

    private static Navigator instance; 

    public synchronized static Navigator getInstance() { 
    if (instance == null) { 
     instance = new Navigator(); 
    } 
    return instance; 
    } 

    public void navigateToActivityA(Context context) { 
     Intent activity= AActivity.getCallingIntent(context); 
     context.startActivity(activity); 
    } 
} 

2. Aggiungere il metodo di chiamata per la classe di attività.

public static Intent getCallingIntent(Context context) { 
return new Intent(context, AActivity.class); 
} 

3. Chiama l'attività con il seguente codice nella vostra attività chiamante.

Navigator.getInstance().navigateToActivityA(this); 

vi suggerisco di leggere su AndroidCleanArchitecture

0

Per questo compito ...

0) Avvio di nuova attività

ho letto ancora una volta sulla questione, e capito che si bisogno di consigli per iniziare l'attività. Quindi, iniziando una nuova attività è Ok, il tuo problema principale sarà con un'altra cosa (vedi sotto).

Ma parliamo di avviare un altro dato. L'utilizzo di Fragment invece non risolve il tuo compito, i frammenti aiutano con il lavoro sullo schermo diverso. Usando ad esempio solo l'aggiornamento dei dati come variante.È possibile utilizzare solo una singola attività e aggiornare solo i dati, sembrerà molto meglio, se si aggiunge anche l'animazione, ma non meglio di avviare l'attività.

L'utilizzo di Fragment consente di eseguire diverse azioni sullo schermo. E forse, rispondendo alla tua domanda, sarà la soluzione più adatta . Devi solo usare l'acidità singola - PostActivity e diversi frammenti - FragmentMainPost, FragmentRelated - che saranno sostituiti, l'un l'altro, selezionando dal post correlato.

1) Problemi di tornare indietro

lascia immaginare, che gli utenti fa clic per nuova attività e siamo caricati nuovi dati. Va bene, e quando gli utenti fanno clic su oltre 100 attività e ricevono molte informazioni. Va bene, anche. Ma la domanda principale qui sta tornando indietro (anche un'altra sulla cache, ma lasciamo, per ora).

Così tutti sanno, è una cattiva idea salvare un sacco di attività in pila. Quindi per ogni mia applicazione, con comportamenti simili, sovrascriviamo suBackPressed in questa attività. Ma come, permette di vedere il flusso di seguito:

//Activities most have some unique ID for saving, for ex, post number. 
//Users clicks to 100 new activities, just start as new activity, and 
//finish previous, via method, or setting parameter for activity in AndroidManifest 
<activity 
    noHistory=true> 
</activity> 

.... 

//When activity loaded, save it's activity data, for ex, number of post 
//in some special place, for example to our Application. So as a result 
//we load new activity and save information about it to list 
.... 

// User now want return back. We don't save all stack this activities, 
// so all is Ok. When User pressing back, we start action for loading 
//activities, saved on our list.. 

..... 

    onBackPressed() { 
     //Getting unique list 
     LinkedTreeSet<PostID> postList =  
      getMyApplication().getListOfHistory(); 

     //Getting previous Post ID based on current 
     PostID previousPostID = postList.get(getCurrentPost()); 

     //Start new activity with parameter (just for ex) 
     startActivity(new Intent().putExtra(previousPostID)); 

    } 

RISULTATO

Ho trovato questo come la migliore soluzione per questi compiti. Perché in ogni momento - lavoriamo solo con una singola attività!

Problemi correlati