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.
- Cómo cambiar la línea de fondo de EditText mediante programación
- Hacer un mensaje Toast de un hilo independiente
- Necesita ayuda para cambiar de actividad
- Facebook SDK v3.5.2 - Solicitar permisos desde una sesión cerrada
- ¡Desajuste del tarro! Corregir sus dependencias para el FacebookSDK
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
- ¿Es realmente imposible proteger las aplicaciones de Android de ingeniería inversa?
- La respuesta de Json es un android muy lento
- Diferencia entre código antes y después de super ()
- Android: activar un botón
- Android y Lambda
- Archivo de clase para java.nio.file.Path no encontrado
- Esperando la devolución de llamada asincrónica en IntentService de Android
- Dispositivo Android a la conexión de socket del PC
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.
- Gradle-experimental: 0.1.0 buildConfigField
- Agregar una nueva columna a una tabla existente de MySeQL y sin superposición de valores de tabla exsisting