2012-01-23 31 views
5

Tôi đang sử dụng một mã số ArrayList trong mã của mình được điền bởi trường EditText nhưng tôi muốn giới hạn ArrayList để nó chỉ có thể chứa 10 giá trị. Sau khi 10 giá trị đã được thêm vào nếu một giá trị khác cố gắng thêm vào, tôi chỉ cần nó không thêm vào số Array. Bất cứ ai có bất kỳ ý tưởng làm thế nào để làm điều đó?ArrayList Giới hạn để giữ 10 Giá trị

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

Các bạn đã thử sử dụng một mảng thay vì một danh sách? 'String [] myarray = new String [10]; ' – Jave

+0

ArrayList nhanh hơn và có thể thay đổi hơn String [] – Lucifer

+1

ArrayList chắc chắn không nhanh hơn mảng, đặc biệt vì ArrayList sử dụng mảng nội bộ để lưu trữ dữ liệu. Lý do sử dụng danh sách thay vì mảng là danh sách linh hoạt hơn, một phần trong đó chức năng op muốn xóa. – Jave

Trả lời

9

Trong phương pháp xử lý của bạn:

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

Sửa: sai lầm của bạn là ở đây:

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 
} 

Bạn nên kiểm tra kích thước bên trong onClickListener, không bên ngoài:

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

Tôi đang cố gắng thực hiện điều này nhưng vẫn bổ sung hơn 10, bạn có thể xem http://pastebin.com/LZAxHzdQ này chỉ cần kiểm tra xem tôi đã triển khai đúng chưa? – Matt

+0

@Matt: Đã tìm thấy sự cố. Xem chỉnh sửa của tôi. – Tudor

8

Nếu bạn không có quyền kiểm soát chức năng thêm các phần tử vào danh sách, bạn có thể muốn ghi đè lên ArrayListadd.

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

Bạn nên trả về false trên người khác hoặc sau nếu, nếu không nó sẽ không biên dịch. – Tudor

+0

Rõ ràng nhưng chúng ta cũng cần ghi đè lên phương thức addAll. Một phần thú vị là chúng ta nên thêm một phần của bộ sưu tập nhất định hay không trong trường hợp tràn kích thước. –

0

Bạn sửa đổi phương thức setter của bạn như thế này.

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

Hoặc

Bạn có thể mở rộng ArrayList và tạo lớp tùy chỉnh của riêng bạn.

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

ArrayList không có cách giới hạn kích thước; bạn có thể mở rộng nó để bao gồm một giới hạn:

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

tùy chọn khác bao gồm:

Các vấn đề liên quan