Cómo pasar ArrayList de objetos de una a otra actividad utilizando Intent en android?

Tengo lo siguiente en código en mi método onClick() como

  List<Question> mQuestionsList = QuestionBank.getQuestions(); 

Ahora tengo la intención después de esta línea, como sigue:

  Intent resultIntent = new Intent(this, ResultActivity.class); resultIntent.putParcelableArrayListExtra("QuestionsExtra", (ArrayList<? extends Parcelable>) mQuestionsList); startActivity(resultIntent); 

No sé cómo pasar estas listas de preguntas en la intención de una actividad a otra actividad Mi clase Pregunta

 public class Question { private int[] operands; private int[] choices; private int userAnswerIndex; public Question(int[] operands, int[] choices) { this.operands = operands; this.choices = choices; this.userAnswerIndex = -1; } public int[] getChoices() { return choices; } public void setChoices(int[] choices) { this.choices = choices; } public int[] getOperands() { return operands; } public void setOperands(int[] operands) { this.operands = operands; } public int getUserAnswerIndex() { return userAnswerIndex; } public void setUserAnswerIndex(int userAnswerIndex) { this.userAnswerIndex = userAnswerIndex; } public int getAnswer() { int answer = 0; for (int operand : operands) { answer += operand; } return answer; } public boolean isCorrect() { return getAnswer() == choices[this.userAnswerIndex]; } public boolean hasAnswered() { return userAnswerIndex != -1; } @Override public String toString() { StringBuilder builder = new StringBuilder(); // Question builder.append("Question: "); for(int operand : operands) { builder.append(String.format("%d ", operand)); } builder.append(System.getProperty("line.separator")); // Choices int answer = getAnswer(); for (int choice : choices) { if (choice == answer) { builder.append(String.format("%d (A) ", choice)); } else { builder.append(String.format("%d ", choice)); } } return builder.toString(); } } 

Actividad: Trabajó para mí

 ArrayList<Object> object = new ArrayList<Object>(); Intent intent = new Intent(Current.class, Transfer.class); Bundle args = new Bundle(); args.putSerializable("ARRAYLIST",(Serializable)object); intent.putExtra("BUNDLE",args); startActivity(intent); 

En la Transfer.class

 Intent intent = getIntent(); Bundle args = intent.getBundleExtra("BUNDLE"); ArrayList<Object> object = (ArrayList<Object>) args.getSerializable("ARRAYLIST"); 

Espero que esta ayuda es alguien.

Uso de Parcelable para pasar datos entre Actividad

Esto normalmente funciona cuando se ha creado DataModel

Por ejemplo, supongamos que tenemos un json de tipo

 { "bird": [{ "id": 1, "name": "Chicken" }, { "id": 2, "name": "Eagle" }] } 

Aquí el pájaro es una lista y contiene dos elementos tan

Crearemos los modelos usando jsonschema2pojo

Ahora tenemos la clase de modelo Nombre BirdModel y Bird BirdModel consisten en la lista de pájaro y pájaro contiene el nombre y la identificación

Ir a la clase de aves y añadir la interfaz " implementa Parcelable "

Añadir método implemets en android studio por Alt + Enter

Nota: Aparecerá un cuadro de diálogo diciendo Método Add implements, pulse Intro

La implementación agregar Parcelable pulsando la tecla Alt + Enter

Nota: Aparecerá un cuadro de diálogo diciendo Agregar implementación parcelable e Intro

Ahora pasarlo a la intención.

 List<Bird> birds = birdModel.getBird(); Intent intent = new Intent(Current.this, Transfer.class); Bundle bundle = new Bundle(); bundle.putParcelableArrayList("Birds", birds); intent.putExtras(bundle); startActivity(intent); 

Y sobre Actividad de Transferencia enCrear

 List<Bird> challenge = this.getIntent().getExtras().getParcelableArrayList("Birds"); 

Gracias

Si hay cualquier problema por favor hágamelo saber.

Funciona bien,

 public class Question implements Serializable { private int[] operands; private int[] choices; private int userAnswerIndex; public Question(int[] operands, int[] choices) { this.operands = operands; this.choices = choices; this.userAnswerIndex = -1; } public int[] getChoices() { return choices; } public void setChoices(int[] choices) { this.choices = choices; } public int[] getOperands() { return operands; } public void setOperands(int[] operands) { this.operands = operands; } public int getUserAnswerIndex() { return userAnswerIndex; } public void setUserAnswerIndex(int userAnswerIndex) { this.userAnswerIndex = userAnswerIndex; } public int getAnswer() { int answer = 0; for (int operand : operands) { answer += operand; } return answer; } public boolean isCorrect() { return getAnswer() == choices[this.userAnswerIndex]; } public boolean hasAnswered() { return userAnswerIndex != -1; } @Override public String toString() { StringBuilder builder = new StringBuilder(); // Question builder.append("Question: "); for(int operand : operands) { builder.append(String.format("%d ", operand)); } builder.append(System.getProperty("line.separator")); // Choices int answer = getAnswer(); for (int choice : choices) { if (choice == answer) { builder.append(String.format("%d (A) ", choice)); } else { builder.append(String.format("%d ", choice)); } } return builder.toString(); } } 

En su actividad de origen, utilice esto:

  List<Question> mQuestionList = new ArrayList<Question>; mQuestionsList = QuestionBank.getQuestions(); mQuestionList.add(new Question(ops1, choices1)); Intent intent = new Intent(SourceActivity.this, TargetActivity.class); intent.putExtra("QuestionListExtra", ArrayList<Question>mQuestionList); 

En su actividad objetivo, utilice esto:

  List<Question> questions = new ArrayList<Question>(); questions = (ArrayList<Question>)getIntent().getSerializableExtra("QuestionListExtra"); 

Pasos:

  1. Implementa su clase de objeto en serializable

     public class Question implements Serializable` 
  2. Ponga esto en su Actividad Fuente

     ArrayList<Question> mQuestionList = new ArrayList<Question>; mQuestionsList = QuestionBank.getQuestions(); mQuestionList.add(new Question(ops1, choices1)); Intent intent = new Intent(SourceActivity.this, TargetActivity.class); intent.putExtra("QuestionListExtra", mQuestionList); 
  3. Ponga esto en su actividad objetivo

      ArrayList<Question> questions = new ArrayList<Question>(); questions = (ArrayList<Questions>) getIntent().getSerializableExtra("QuestionListExtra"); 

Pase su objeto a través de Parcelable. Y aquí hay un buen tutorial para empezar.
La primera pregunta debe implementar Parcelable como esto y agregar las líneas:

 public class Question implements Parcelable{ public Question(Parcel in) { // put your data using = in.readString(); this.operands = in.readString();; this.choices = in.readString();; this.userAnswerIndex = in.readString();; } public Question() { } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(operands); dest.writeString(choices); dest.writeString(userAnswerIndex); } public static final Parcelable.Creator<Question> CREATOR = new Parcelable.Creator<Question>() { @Override public Question[] newArray(int size) { return new Question[size]; } @Override public Question createFromParcel(Parcel source) { return new Question(source); } }; } 

Luego pase sus datos de esta manera:

 Question question = new Question(); // put your data Intent resultIntent = new Intent(this, ResultActivity.class); resultIntent.putExtra("QuestionsExtra", question); startActivity(resultIntent); 

Y obtener sus datos como este:

 Question question = new Question(); Bundle extras = getIntent().getExtras(); if(extras != null){ question = extras.getParcelable("QuestionsExtra"); } 

¡Esto lo hara!

Si su pregunta de clase contiene sólo primitivos , Serializeble o campos de cadenas puede implementar Serializable . ArrayList es implementar Serializable , por eso puede ponerlo como Bundle.putSerializable (key, value) y enviarlo a otra Activity . IMHO, Parcelable – es un camino muy largo.

Hago una de dos cosas en este escenario

  1. Implementar un sistema serializar / deserializar para mis objetos y pasarlos como Cuerdas (en formato JSON por lo general, pero puede serializarlos como quiera)

  2. Implementar un contenedor que vive fuera de las actividades para que todas mis actividades puedan leer y escribir en este contenedor. Puede hacer este contenedor estático o utilizar algún tipo de inyección de dependencia para recuperar la misma instancia en cada actividad.

Parcelable funciona muy bien, pero siempre he encontrado que es un patrón de aspecto feo y realmente no agrega ningún valor que no está allí si usted escribe su propio código de serialización fuera del modelo.

Su creación de la intención parece correcta si su Question implementa Parcelable .

En la siguiente actividad puede recuperar su lista de preguntas como esta:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(getIntent() != null && getIntent().hasExtra("QuestionsExtra")) { List<Question> mQuestionsList = getIntent().getParcelableArrayListExtra("QuestionsExtra"); } } 

Usted puede pasar el arraylist de una actividad a otra usando el paquete con intención. Utilice el siguiente código Esta es la forma más corta y más adecuada para pasar arraylist

Bundle.putStringArrayList ("palabra clave", arraylist);

Usted debe necesitar también implementar el interfaz Parcelable y debe agregar el método writeToParcel a su clase de las preguntas con argumento del paquete en constructor además de serializable. De lo contrario la aplicación se bloqueará.

Tuve exactamente la misma pregunta y mientras todavía hassling con el Parcelable , me enteré de que las variables estáticas no son una mala idea para la tarea.

Simplemente puede crear un

 public static ArrayList<Parliament> myObjects = .. 

Y usarlo desde otra parte a través de MyRefActivity.myObjects

No estaba seguro de qué implican las variables estáticas públicas en el contexto de una aplicación con actividades. Si también tiene dudas sobre este aspecto o sobre aspectos de rendimiento de este enfoque, consulte:

  • ¿Cuál es la mejor manera de compartir datos entre actividades?
  • Uso de variables estáticas en Android

Aclamaciones.

  • Parcelable de Android Longitudes de array incorrectas
  • GetParcelableArrayList devuelve null
  • Parcelable y herencia en Android
  • Agregando parcelable a una clase de interfaz para objetos personalizados
  • ¿Es posible crear un HashMap que sea Parcelable en Android?
  • Cómo implementar correctamente Parcelable con un ArrayList <Parcelable>?
  • Objetos complementarios en las interfaces Kotlin
  • ¿Cómo leer y escribir Enum en paquete en Android?
  • List <String> readStringArray en Parcelable
  • ¿Cómo usar Parcelable en fragmento para obtener datos?
  • La API de reproductor de YouTube para Android lanza "BadParcelableException ClaseNotFoundException al desmarcar: asc" con la nueva versión de YouTube
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.