2012-01-23 51 views
5

Estoy utilizando un ArrayList dentro de mi código que se rellena con un campo EditText pero quiero limitar el ArrayList por lo que solo puede contener 10 valores. Después de que se hayan agregado 10 valores, si otro intenta agregarse, solo necesito que no se agregue al Array. Alguien tiene alguna idea de cómo hacer eso?Límite ArrayList para contener 10 valores

private static ArrayList<String> playerList = new ArrayList<String>(); 
+0

¿Ha intentado utilizar una matriz en lugar de ¿una lista? 'String [] myarray = new String [10];' – Jave

+0

ArrayList es más rápido y mutable que String [] – Lucifer

+1

ArrayList ciertamente no es más rápido que una matriz, especialmente porque ArrayList usa una matriz interna para almacenar datos. La razón para usar listas en lugar de matrices es que las listas son más flexibles, parte de las cuales la funcionalidad op quiere eliminar. – Jave

Respuesta

9

En el método de control:

if(playerList.size() < 10) { 
    // playerList.add 
} else { 
    // do nothing 
} 

Editar: Tu error es aquí:

if(playerList.size() < 10) { 

    Button confirm = (Button) findViewById(R.id.add); 
    confirm.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    EditText playername = (EditText) findViewById(R.id.userinput); 
    playerList.add(playername.getText().toString()); 
    adapter.notifyDataSetChanged(); 
    playername.setText(""); 

    }}); 
} else { 
     // do nothing 
} 

Debe comprobar el tamaño en el interior del onClickListener, no en el exterior:

Button confirm = (Button) findViewById(R.id.add); 
    confirm.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      EditText playername = (EditText) findViewById(R.id.userinput); 
      if(playerList.size() < 10) { 
       playerList.add(playername.getText().toString()); 
       adapter.notifyDataSetChanged(); 
       playername.setText(""); 
      } else { 
       // do nothing 
      } 
     } 
    }); 
+0

Estoy tratando de implementar esto, pero todavía agrega más de 10, ¿pueden echar un vistazo a este http://pastebin.com/LZAxHzdQ? Solo verifiquen que lo he implementado correctamente. – Matt

+0

@Matt: encontré el problema. Ver mi edición – Tudor

8

Si no tiene control sobre la función que agrega elementos a la lista, es posible que desee sobrescribir ArrayListadd.

public class MySizeLimitedArrayList extends ArrayList<Object> { 
    @Override 
    public boolean add(Object e) { 
     if (this.size() < 10) { 
      return super.add(e); 
     } 
     return false; 
    } 
} 
+0

Debe devolver false en el else o after the if; de lo contrario, no compilará. – Tudor

+0

Es obvio, pero también debemos reemplazar todos los métodos addAll. Una parte interesante es si agregamos parte de la colección determinada o no en caso de desbordamiento de tamaño. –

0

Modifica su método setter de esta manera.

private static ArrayList<String> playerList = new ArrayList<String>(); 

public boolean addToPlayerList(String input) { 
    if (playerList.size() < 10) { 
     playerList.add(input); 
     return true; 
    } else { 
     return false; 
    } 
} 

O

Puede extender ArrayList y crear su propia clase personalizada.

public class MyArrayList extends ArrayList { 
    @Override 
    public boolean add(String input) { 
     if (this.size() < 10) { 
      return super.add(input); 
     } else { 
      return false; 
     } 
    } 
} 
1

ArrayList no tiene manera de limitar el tamaño; usted podría ampliarse para incluir un límite:

public class FixedSizeLimitedArrayList extends ArrayList<Object> { 
    @Override 
    public boolean add(Object o) { 

     int n=10; 
     if (this.size() < n) { 
      return super.add(o); 
     } 
     return false; 
    } 
} 

Otras opciones incluyen:

Cuestiones relacionadas