2013-05-01 23 views
8

Làm cách nào tôi có thể truy xuất ArrayList cơ bản từ một ArrayAdapter trong Android?Nhận bản gốc ArrayList từ ArrayAdapter

Điều này có thể xảy ra hoặc tôi có cần theo dõi riêng biệt không?

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); 
ArrayList<String> underlying = 
+3

mã ở đâu? – stackoverflow

+0

đã thêm mã ví dụ – jsj

Trả lời

5

Bạn có thể làm điều này để có được những tiềm ẩn ArrayList

ArrayList<String> underlying = = new ArrayList<String>(); 
for (int i = 0; i < adapter .getCount(); i++) 
    underlying .add(adapter .getItem(i)); 
+0

Đây có phải là giải pháp lý tưởng không? – jsj

+1

theo cách này bạn thực sự có được một bản sao của arrayList ban đầu, do đó, nó phụ thuộc vào nhu cầu của bạn. –

+0

@androiddeveloper: vâng, nó phụ thuộc vào nhu cầu. Vì vậy, tôi không nói rằng đó là một giải pháp lý tưởng, nhưng có thể được sử dụng để có được 'ArrayList'. –

1

Tôi nghĩ rằng nếu bạn không có tính năng này, bạn có thể dễ dàng tạo một bộ chuyển đổi phù hợp với nhu cầu của bạn bằng cách mở rộng BaseAdapter thay .

chỉ cần gửi danh sách tới bộ điều hợp qua CTOR của nó và bạn có thể thay đổi nó sau từ bên ngoài bộ điều hợp và gọi notifyDataSetChanged khi bạn hoàn tất.

từ thận trọng: nếu bạn có phiên bản gốc của danh sách bộ điều hợp, bạn nên xử lý các vấn đề đa luồng (hoặc truy cập thông qua chuỗi giao diện người dùng) và nếu bạn sửa đổi nó (đặc biệt là thêm/xóa các mặt hàng) bạn nên luôn luôn gọi notifyDataSetChanged.

0

cách tiếp cận khác nhau nhưng cũng có thể đáp ứng nhu cầu của bạn: Mở rộng bộ chuyển đổi của bạn từ "ArrayAdapter", tuyên bố mảng bên ngoài, sau đó vượt qua mảng vào constructor khi tạo adapter

//Adapter Declaration 
class MyArrayAdapter extends ArrayAdapter<MyType> {} 

//Externally declared ArrayList: 
ArrayList<MyType> myList = new ArrayList<MyType>(); 

//Adapter Instantiation (in your activity) 
MyArrayAdapter adapter = new MyArrayAdapter(this, myList); 
-1

Nó rất dễ dàng. Bạn cần có Adapter của bạn và sử dụng phương thức clear().

((myArrayAdapter)myListView.getAdapter()).clear(); 
+0

Không yêu cầu xóa các mục trong Bộ điều hợp ... –

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