Why does in the DetailsActivity are values not passed from the MainActivity in AndroidStudio?

PressRex profile image
by PressRex
Why does in the DetailsActivity are values not passed from the MainActivity in AndroidStudio?

The problem is: Destination, date and notes are not displayed in the DetailsActivity, only the trip type is displayed. I think there is a problem in the Intent but honestly I can't figure out which one and after several days of intensive study I kindly ask you for help. Thank you in advance.

PS. I'll try to post the code. If necessay I'll post activity.xml and so on.

//MainActivity

package com.example.mytravelplanner;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private EditText editTextDestination;
    private Spinner spinnerTravelType;
    private Button buttonSelectDate;
    private TextView textViewSelectedDate;
    private EditText editTextNote;
    private Button buttonAddDestination;
    private RecyclerView recyclerView;
    private DestinationsAdapter destinationsAdapter;
    private ArrayList<Destination> destinationsList;

    private String selectedDate = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        // Collega le view dal layout (activity_main.xml)
        editTextDestination = findViewById(R.id.editTextDestination);
        spinnerTravelType = findViewById(R.id.spinnerTravelType);
        buttonSelectDate = findViewById(R.id.buttonSelectDate);
        editTextNote = findViewById(R.id.editTextNote);
        buttonAddDestination = findViewById(R.id.buttonAddDestination);
        recyclerView = findViewById(R.id.recyclerViewDestinations);
        textViewSelectedDate = findViewById(R.id.textViewSelectedDate);

        // Inizializza la lista delle destinazioni, della RecyclerView e l'adapter
        destinationsList = new ArrayList<>();
        destinationsAdapter = new DestinationsAdapter(destinationsList); // gestisce il contenuto della lista
        recyclerView.setLayoutManager(new LinearLayoutManager(this)); // imposta il layout manager per visualizzare le destinazioni in una lista verticale
        recyclerView.setAdapter(destinationsAdapter);

        //Aggiungi un listener di click sugli elementi della lista


        // Configurazione dello spinner
        ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(
                this,
                R.array.travel_types, // Array definito in strings.xml
                android.R.layout.simple_spinner_item // Layout predefinito per gli elementi del spinner
        );
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerTravelType.setAdapter(spinnerAdapter);

        // Gestione del pulsante "Seleziona Data" attraverso un OnClickListener
        buttonSelectDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDatePicker();
            }
        });

        // Gestione del pulsante "Aggiungi Destinazione" attraverso un OnClickListener
        buttonAddDestination.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String travelType = spinnerTravelType.getSelectedItem().toString();

                // Verifica che i campi obbligatori siano compilati
                if (editTextDestination.getText().toString().isEmpty() ||
                        selectedDate.isEmpty() ||
                        travelType.isEmpty()) {
                    Toast.makeText(MainActivity.this, "Compila tutti i campi obbligatori", Toast.LENGTH_SHORT).show();
                    return;
                }

                // Log per debug
                Log.d("MainActivity", "Aggiunta destinazione: " + editTextDestination.getText().toString());

                // Aggiungi la destinazione alla lista
                addDestination();

                // Crea un Intent per passare alla DetailsActivity
                Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
                intent.putExtra("destinationName", destinationsList.toString());
                intent.putExtra("travelType", travelType);
                intent.putExtra("travelDate", selectedDate);
                intent.putExtra("note", editTextNote.getText().toString());
                startActivity(intent);


            }
        });
    }

    // Metodo per selezionare la data
    private void showDatePicker() {
        Log.d("DatePicker", "showDatePicker chiamato");
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this,
                (view, year1, month1, dayOfMonth) -> {
                    Calendar selectedCalendar = Calendar.getInstance();
                    selectedCalendar.set(year1, month1, dayOfMonth);

                    // Formatta la data
                    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
                    selectedDate = dateFormat.format(selectedCalendar.getTime());

                    // Aggiorna la TextView con la data selezionata
                    textViewSelectedDate.setText("Data Selezionata: " + selectedDate);
                },
                year, month, day);
        datePickerDialog.show();
    }

    // Metodo per aggiungere una destinazione alla lista
    private void addDestination() {
        String destinationName = editTextDestination.getText().toString();
        String travelType = spinnerTravelType.getSelectedItem().toString();
        String date = selectedDate;
        String note = editTextNote.getText().toString();

        // Log per vedere se destinationName è correttamente popolato
        Log.d("MainActivity", "Destination Name: " + destinationName); // Qui aggiungi il log

        // Verifica che i campi obbligatori siano compilati
        if (destinationName.isEmpty() || travelType.isEmpty() || date.isEmpty()) {
            Toast.makeText(this, "Compila tutti i campi", Toast.LENGTH_SHORT).show();
            return;
        }

        // Crea un nuovo oggetto Destination
        Destination newDestination = new Destination(destinationName, travelType, date, note);
        destinationsList.add(newDestination); // Aggiungi l'oggetto Destination alla lista
        destinationsAdapter.notifyItemInserted(destinationsList.size() - 1); // Notifica l'adapter che ci sono nuovi dati per aggiornare la RecyclerView

        // Pulisce i campi
        editTextDestination.setText("");
        spinnerTravelType.setSelection(0);
        selectedDate = "";
        textViewSelectedDate.setText("Nessuna Data Selezionata");
        editTextNote.setText("");

        // Mostra un messaggio di conferma
        Toast.makeText(this, "Destinazione Aggiunta!", Toast.LENGTH_SHORT).show();
    }
}

//DetailsActivity

package com.example.mytravelplanner;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;

public class DetailsActivity extends AppCompatActivity {

    private TextView textViewDestination;
    private TextView textViewTravelType;
    private TextView textViewDate;
    private TextView textViewNote;

    private Button buttonBack;
    private Button buttonShare;

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

        // Collega le view dal layout (activity_details.xml)
        textViewDestination = findViewById(R.id.textViewDestinationName);
        textViewTravelType = findViewById(R.id.textViewType);
        textViewDate = findViewById(R.id.textViewTravelDate);
        textViewNote = findViewById(R.id.textViewTravelNote);

        // Collega il pulsante di ritorno alla MainActivity
        buttonBack = findViewById(R.id.buttonBack);

        // Collega il pulsante di condivisione della destinazione
        buttonShare = findViewById(R.id.buttonShare);

        // Listener per il pulsante di condivisione
        buttonShare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Ottieni i dati da condividere della destinazione dalla MainActivity
                String destinationName = textViewDestination.getText().toString();
                String travelType = textViewTravelType.getText().toString();
                String date = textViewDate.getText().toString();
                String note = textViewNote.getText().toString();



                // Crea una stringa che contiene i dati da condividere
                String message = "Destinazione: " + destinationName + "\n" +
                        "Tipo di viaggio: " + travelType + "\n" +
                        "Data: " + date + "\n" +
                        "Note: " + note;

                // Usa un Intent implicito per la condivisione
                Intent shareIntent = new Intent(Intent.ACTION_SEND);
                shareIntent.setType("text/plain");
                shareIntent.putExtra(Intent.EXTRA_TEXT, message);

                // Avvia il chooser per selezionare l'applicazione di condivisione
                startActivity(Intent.createChooser(shareIntent, "Condividi Destinazione"));
            }
        });

        // Recupera i dati passati dalla MainActivity
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String destinationName = extras.getString("destinationName");
            String travelType = extras.getString("travelType");
            String travelDate = extras.getString("travelDate");
            String note = extras.getString("note");

            //Log per verificare i dati ricevuti
            Log.d("DetailsActivity", "Received Destination Name: " + destinationName);


            // Controlla se i dati non sono nulli o vuoti e imposta il testo
            if (destinationName != null && !destinationName.isEmpty()) {
                textViewDestination.setText("Destinazione: " + destinationName);
            } else {
                textViewDestination.setText("Destinazione non disponibile");
            }

            if (travelType != null && !travelType.isEmpty()) {
                textViewTravelType.setText("Tipo di viaggio: " + travelType);
            } else {
                textViewTravelType.setText("Tipo di viaggio non disponibile");
            }

            if (travelDate != null && !travelDate.isEmpty()) {
                textViewDate.setText("Data: " + travelDate);
            } else {
                textViewDate.setText("Data non disponibile");
            }

            if (note != null && !note.isEmpty()) {
                textViewNote.setText("Note: " + note);
            } else {
                textViewNote.setText("Note non disponibili");
            }
        }

        // Listener per il pulsante di ritorno alla MainActivity
        buttonBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();  // Termina l'Activity corrente
            }
        });

        // Log per il debug (spostato dopo l'inizializzazione delle viste)
        Log.d("DetailsActivity", "TextView Destination initialized: " + textViewDestination);
    }
}


//DestinationsAdapter

package com.example.mytravelplanner;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class DestinationsAdapter extends RecyclerView.Adapter<DestinationsAdapter.DestinationViewHolder>{

    private final ArrayList<Destination> destinationsList; //Lista delle destinazioni da visualizzare

    //Costruttore per inizializzare la lista delle destinazioni
    public DestinationsAdapter(ArrayList<Destination> destinationsList){
        this.destinationsList = destinationsList;
    }

    //Classe interna per il ViewHolder
    public static class DestinationViewHolder extends RecyclerView.ViewHolder{
        public TextView textViewDestination;
        public TextView textViewTravelType;
        public TextView textViewDate;
        public TextView textViewNote;

        public DestinationViewHolder(View itemView){
                super(itemView);
            //Collega le view dal layout (destination_item.xml)
            textViewDestination = itemView.findViewById(R.id.textViewDestination);
            textViewTravelType = itemView.findViewById(R.id.textViewTravelType);
            textViewDate = itemView.findViewById(R.id.textViewDate);
            textViewNote = itemView.findViewById(R.id.textViewNote);
        }
    }

    public DestinationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //Infla il layout del singolo elemento della lista
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.destination_item, parent, false);
        return new DestinationViewHolder(view);
    }

    //Metodo onBindViewHolder per impostare i dati in ogni elemento della lista


    @Override
    public void onBindViewHolder(@NonNull DestinationViewHolder holder, int position) {
        // Ottieni l'oggetto Destination alla posizione corrente
        Destination destination = destinationsList.get(position);

        //Imposta i dati nel ViewHolder
        holder.textViewDestination.setText(destination.getName());
        holder.textViewTravelType.setText(destination.getTravelType());
        holder.textViewDate.setText(destination.getDate());
        holder.textViewNote.setText(destination.getNote());
    }

        public int getItemCount() {
            /*Restituisce il numero totale di elementi nella lista, utilizzato da RecyclerView
            per sapere quanti elementi mostrare
             */
        return destinationsList.size();
        }


}

//Destination

package com.example.mytravelplanner;

public class Destination {
    private String name;
    private String travelType;//tipo di viaggio (es.Lavoro, studio ecc.)
    private String date;
    private String note;

    //Costruttore
    public Destination (String name, String travelType, String date, String note) {
        this.name = name;
        this.travelType = travelType;
        this.date = date;
        this.note = note;
    }

    //Metodi GETTER
    public String getName(){
        return name;
    }

    public String getTravelType(){
        return travelType;
    }

    public String getDate(){
        return date;
    }

    public String getNote(){
        return note;
    }

    //Metodi SETTER
    public void setName(String name){
        this.name = name;
    }

    public void setTravelType(String travelType){
        this.travelType = travelType;
    }

    public void setDate(String date) {
        this.date = date;
    }

        public void setNote(String note){
            this.note = note;
        }

        //Metodo toString
        public String toString(){
            return "Destination{" +
                    "name='" + name + '\'' +
                    ", travelType='" + travelType + '\'' +
                    ", date='" + date + '\'' +
                    ", note='" + note + '\'' +
                    '}';
        }

}

I'm expecting to solve this little problem

Source: View source

PressRex profile image
by PressRex

Subscribe to New Posts

Lorem ultrices malesuada sapien amet pulvinar quis. Feugiat etiam ullamcorper pharetra vitae nibh enim vel.

Success! Now Check Your Email

To complete Subscribe, click the confirmation link in your inbox. If it doesn’t arrive within 3 minutes, check your spam folder.

Ok, Thanks

Read More