2012-01-23 14 views
5

Sto utilizzando un codice ArrayList all'interno del mio codice che viene popolato da un campo EditText ma sto volendo limitare lo ArrayList in modo che possa contenere solo 10 valori. Dopo che 10 valori sono stati aggiunti se un altro tenta di essere aggiunto, non ne ho bisogno per aggiungerlo allo Array. Qualcuno ha qualche idea su come farlo?ArrayList Limite di attesa 10 Valori

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

Hai provato a usare una matrice, invece di una lista? 'String [] myarray = new String [10];' – Jave

+0

ArrayList è più veloce e mutabile rispetto a String [] – Lucifer

+1

ArrayList non è certamente più veloce di un array, soprattutto perché ArrayList utilizza un array interno per memorizzare i dati. La ragione per utilizzare le liste piuttosto che gli array è che le liste sono più flessibili, parte delle quali la funzionalità op vuole rimuovere. – Jave

risposta

9

Nel vostro metodo del gestore:

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

Edit: Il tuo errore è qui:

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 
} 

Si dovrebbe controllare la dimensione all'interno del onClickListener, non fuori:

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

Sto cercando di implementarlo ma ne aggiungo ancora più di 10, puoi dare un'occhiata a questo http://pastebin.com/LZAxHzdQ, basta controllare se l'ho implementato correttamente? – Matt

+0

@Matt: trovato il problema. Vedi la mia modifica. – Tudor

8

Se non si ha il controllo sulla funzione che aggiunge elementi all'elenco, è possibile eseguire l'override di ArrayListadd.

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

Dovresti restituire false sul else o dopo if, altrimenti non verrà compilato. – Tudor

+0

È ovvio ma dobbiamo anche sovrascrivere i metodi addAll. La parte interessante è che dovremmo aggiungere una parte della raccolta data o non in caso di overflow della dimensione. –

0

È possibile modificare il metodo di setter in questo modo.

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

È possibile estendere ArrayList e creare una classe personalizzata.

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

ArrayList non ha un modo di limitare le dimensioni; si potrebbe estenderla a un limite:

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; 
    } 
} 

Altre opzioni includono:

Problemi correlati