Проблема: назначение, дата и примечания не отображаются в The DetailsActivity, отображается только тип поездки. Я думаю, что есть проблема в намерениях, но, честно говоря, я не могу понять, какой из них и после нескольких дней интенсивного обучения я обращаюсь к вам о помощи. Заранее спасибо. < /P>
ps. Я постараюсь опубликовать код. Если необходим, я опубликую Activation.xml и т. Д. < /p>
//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 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 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();
}
}
//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{
private final ArrayList destinationsList; //Lista delle destinazioni da visualizzare
//Costruttore per inizializzare la lista delle destinazioni
public DestinationsAdapter(ArrayList 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();
}
}
Проблема: назначение, дата и примечания не отображаются в The DetailsActivity, отображается только тип поездки. Я думаю, что есть проблема в намерениях, но, честно говоря, я не могу понять, какой из них и после нескольких дней интенсивного обучения я обращаюсь к вам о помощи. Заранее спасибо. < /P> ps. Я постараюсь опубликовать код. Если необходим, я опубликую Activation.xml и т. Д. < /p> [code]//MainActivity
// 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 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);
// 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(); } }
// 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); } }
public class DestinationsAdapter extends RecyclerView.Adapter{
private final ArrayList destinationsList; //Lista delle destinazioni da visualizzare
//Costruttore per inizializzare la lista delle destinazioni public DestinationsAdapter(ArrayList 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(); }
}
[/code] [code]//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;
Проблема в следующем: пункт назначения, дата и примечания не отображаются в DetailsActivity, отображается только тип поездки. Думаю проблема в Интенте но честно говоря не могу понять какая и после нескольких дней интенсивного изучения прошу Вас о...