Android eliminar y agregar a ArrayList entre actividades

Estoy haciendo mi primera aplicación Android y aquí es donde estoy atrapado. Tengo una actividad A que requiere 4 jugadores para ser recogidos. Estoy pasando a la actividad PickPlayer 1 , 2 , 3 , 4 según el jugador que quiero llenar.

 ImageButton addp1 = (ImageButton)findViewById(R.id.player1); addp1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getApplicationContext(), PickPlayer.class); i.putExtra("playersList", playersList); startActivityForResult(i, 1); } }); 

En la actividad PickPlayer tengo una lista que se llena y cada elemento recibe un oyente.

  final ArrayList<Player> playersList = (ArrayList<Player>)getIntent().getSerializableExtra("playersList"); lv.setAdapter(new PlayerItemAdapter(this, android.R.layout.simple_list_item_1, playersList)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) { player = playersList.get(position); playersList.remove(position); Intent intentMessage = new Intent(); intentMessage.putExtra("player", player); intentMessage.putExtra("playersList", playersList); setResult(RESULT_OK, intentMessage); finish(); } });` 

Lo anterior funciona bien creando la playersList de playersList en la actividad A y pasándola de una a otra cada vez y eliminando el jugador de la lista de reproductores al hacer clic. El problema es si un jugador es elegido por error que necesita ser puesto de nuevo en la lista de nuevo una vez sustituido por otra persona.

¿Alguna sugerencia para implementar esto? Una forma en la que pensé es pasar de la actividad A a PickPlayer el jugador (si se asigna una ya en su posición) y volver a playerList a la lista de playerList nuevo, pero estoy seguro de que hay una mejor manera de hacerlo. Soy nuevo en Android, así que no tengo idea de los recursos y las mejores prácticas. (Ejemplo pasar un objeto a través de actividades o un id y ejecutar una consulta db).

Gracias

IMO, obtendrás mejores resultados con una clase singleton (o métodos en la instancia de la aplicación – aquí una buena pregunta stackoverflow sobre ella).

Su matriz será un miembro interno del singleton y tendrá un atributo booleano para indicar si un jugador ya está seleccionado o no. Algunos métodos que utilizan este atributo se pueden implementar como:

  • List<Player> getPickedPlayers()
  • List<Player> getNotPickedPlayers()
  • void setPlayerPicked(Player player)
  • void setPlayerNotPicked(Player player)
  • y así…

¡Espero eso ayude!

Cuando envías objetos a través de un paquete de Intent ( i.putExtra("playersList", playersList); ), se organiza y luego se desmarca en el otro lado (la nueva actividad). Esto significa que tiene 2 instancias de ArrayList y su contenido (una en cada actividad). Si desea compartir datos entre la actividad A y la actividad B, le sugiero que la almacene en una instancia de aplicación o mediante un singleton.

Si sus datos provienen de una base de datos, puede pasar el ID a través de la intención, y obtener la lista de jugadores y el jugador especial con una consulta de base de datos.

No estoy seguro de si esta es la mejor manera de lograr esto, pero voy a compartir con usted.

Muevo el arrayList con los jugadores de ida y vuelta entre las actividades. Una vez que el jugador es devuelto, se quita de él y se mantiene en un objeto player1 , player2 , player3 etc etc

Así que si el usuario hace clic en el botón que ya tiene un jugador asignado a él, simplemente añadir ese jugador de nuevo en la lista y pasar el arrayList como lo haría si estuviera vacío.

  • Android @Inject y anotaciones de @InjectView significado
  • No se puede reanudar la actividad
  • Widget de aplicación: Efecto de ondulación perdido en el elemento de lista cuando se agrega fondo al diseño externo
  • ListView in Scroll Ver mi vista de desplazamiento se mueve a la parte superior de listview. ¿Cómo puedo evitar esto?
  • Cómo hacer el "export jar" de Eclipse desde la línea de comandos
  • Brooks Pointer en la clase Object
  • ¿Está JDK 1.8 totalmente compatible con Android Studio?
  • ¿Cómo obtener el tamaño del diálogo?
  • Cómo mover el marcador a lo largo de la polilínea mediante google map
  • Personaje "|" en sms
  • ¿Qué es el método Descriptor / signature para byte byte array usando JNI?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.