7.6: Passare ad una nuova activity al click su un item della RecyclerView

Condividi su:

In questo articolo concluderemo l’app dedicata alle RecyclerView facendo in modo che al click su ogni elemento della collezione, piuttosto che visualizzare un toast, venga avviata una nuova activity che dettaglia l’elemento cliccato.





Questo argomento sarà molto semplice da trattare, poiché abbiamo già tutto l’occorrente, compreso il gestore dell’evento, che abbiamo settato nel precedente articolo.

L’activity secondaria

Per prima cosa creiamo la seconda activity. Questa dovrà visualizzare i dettagli dell’item cliccato, quindi saranno sufficienti due TextView. La prima visualizzerà il titolo, la seconda la descrizione. La creeremo come al solito come activity vuota e ovviamente dovrà trovarsi nel package dedicato alla nostra app, quindi nello stesso package dove si trova la MainActivity. Ricordate che stiamo organizzando le nostre classi in appositi package, ognuno preposto a contenere classi specifiche, che hanno relazioni tra loro.

Preparato il layout, possiamo già addentrarci nel codice di questa activity secondaria. Non sarà necessario dettagliarlo, poiché questa verrà avviata attraverso un intent corredato da extras. Sarà sufficiente raccogliere gli extras in un bundle, prelevarne i dati e settarli sulle due TextView:

public class DetailsActivity extends AppCompatActivity {
    private TextView dTitle, dDescription;
    private Bundle extras;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);

        dTitle = (TextView) findViewById(R.id.dTitleID);
        dDescription = (TextView) findViewById(R.id.dDescriptionID);

        extras = getIntent().getExtras();

        dTitle.setText(extras.getString("title"));
        dDescription.setText(extras.getString("description"));
    }
}

Codice già visto e rivisto, l’unica cosa degna di nota e la dichiarazione dei due field dedicati alle due TextView in un unica istruzione. Nulla di particolare, come per le variabili dello stesso tipo, anche gli oggetti della stessa classe possono essere dichiarati tutti insieme.

La creazione dell’intent e l’avvio dell’activity secondaria

L’obiettivo è avviare questa activity secondaria quando si clicca su uno degli item della RecyclerView. Abbiamo già predisposto il gestore dell’evento, quindi andremo semplicemente a creare l’intent lì, corredandolo degli appositi extras:

public void onClick(View view) {
            int position = getAdapterPosition();

            ListItem item = listItems.get(position);

            Intent intent = new Intent(context, DetailsActivity.class);
            intent.putExtra("title", item.getName());
            intent.putExtra("description", item.getDescription());

            //Toast.makeText(context, item.getName(), Toast.LENGTH_LONG).show();
}

Vi ricordo, semmai fosse necessario, che ci troviamo all’interno dell’inner class del ViewHolder, quindi all’interno del file dedicato all’adapter. Semplicemente, piuttosto che creare un toast, sfruttiamo i getter dell’oggetto contenente l’item gestito dal ViewHolder per inserire le informazioni di cui abbiamo bisogno all’interno degli extras dell’intent. Ancora una volta sfruttiamo il field “context”, poiché questo contiene il riferimento all’istanza della MainActivity, che è esattamente il mittente dell’intent.

Adesso non resta che invocare il metodo “startActivity()” passandogli l’intent appena creato e il gioco è fatto. Purtroppo questo metodo può essere invocato solo nell’ambito di un’activity; siamo invece all’interno di una inner class della classe predisposta per un adapter, che ovviamente non è un’activity. Come fare allora? Sfruttiamo ancora una volta il field “context”, che di fatto rappresenta l’istanza della MainActivity, quindi possiamo completare il codice:

public void onClick(View view) {
            int position = getAdapterPosition();

            ListItem item = listItems.get(position);

            Intent intent = new Intent(context, DetailsActivity.class);
            intent.putExtra("title", item.getName());
            intent.putExtra("description", item.getDescription());
            context.startActivity(intent);

            //Toast.makeText(context, item.getName(), Toast.LENGTH_LONG).show();
}



Conclusioni

Questo è tutto, nulla di nuovo, a parte il piccolo accorgimento per il metodo “startActivity()”. Con questo articolo abbiamo anche concluso l’unità dedicata alle RecyclerView. Vista la complessità leggermente superiore a quanto visto finora, rivedete un po’ il tutto, se necessario e create qualche altro piccolo progetto con protagonista questo nuovo widget. Magari potete modificare l’app creata in questo articolo, sfruttando proprio una RecyclerView per visualizzare la lista di palloni.

Dal prossimo articolo ci dedicheremo alla gestione dei media in Android.

Condividi su:

label, , , , , ,

About the author