2012-01-23 7 views
5

ArrayListのコード内にEditTextフィールドが設定されていますが、ArrayListに10個の値しか保持できないようにしたいと考えています。別のものが追加しようとすると10個の値が追加された後、私はArrayに追加しないでください。誰でもそれをする方法を知っていますか?あなたのハンドラメソッドでArrayList 10個の値を保持するための制限

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

あなたは、配列の代わりに使用して試してみましたがリスト? 'String [] myarray = new String [10];' – Jave

+0

ArrayListはString []より速く&変更可能です。 – Lucifer

+1

ArrayListは確かに配列より高速ではありませんが、特にArrayListは内部配列を使ってデータを格納します。配列ではなくリストを使用する理由は、リストの柔軟性が高まり、機能の一部が削除したいということです。 – Jave

答えて

9

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

編集:あなたの間違いはここにある:

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 
} 

あなたがいない外、onClickListener内のサイズを確認する必要があります

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

私はこれを実装しようとしていますが、まだ10以上を追加しています。このhttp://pastebin.com/LZAxHzdQを見てください。正しく実装されていますか? – Matt

+0

@Matt:問題が見つかりました。私の編集を参照してください。 – Tudor

8

要素をリストに追加する機能を制御できない場合は、ArrayListaddを上書きすることができます。

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

elseまたはfalseの後にfalseを返す必要があります。そうしないと、コンパイルされません。 – Tudor

+0

明らかですが、addAllメソッドもオーバーライドする必要があります。興味深いのは、サイズのオーバーフローの場合に、指定されたコレクションの一部を追加するかどうかです。 –

0

あなたはこのようなセッターメソッドを変更します。

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

それとも

あなたはArrayListを拡張し、独自にカスタマイズしたクラスを作成することができます。

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

ArrayListサイズを制限する方法はありません。あなたが制限を含むように拡張することができます:

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

その他のオプションが含まれます:

関連する問題