2012-01-16 33 views
8

Vì vậy, nếu tôi có thể tạo một AlertDialog như vậy:Android - Làm mới dữ liệu trong AlertDialog?

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
b.create().show(); 

Và sau đó tôi muốn cập nhật các mục trong danh sách, ví dụ: MyStringArray đã thay đổi để có nhiều hơn hoặc ít hơn các mặt hàng. Tôi không thể tìm cách để làm điều này. Cho đến nay, tôi đã cố gắng nhận được ListView từ AlertDialog, nhưng tôi dường như không thể nhận được .setAdapter để làm việc. Đây có phải là cách tiếp cận đúng hay là có cách nào tốt hơn để làm điều này?

Trả lời

9

Tôi chưa thử điều này, nhưng từ tất cả các ứng dụng khác mà tôi đã tạo, tôi chắc chắn điều này sẽ giải quyết được sự cố của bạn.

Thay vì sử dụng setItems, hãy thử sử dụng phương pháp setAdapter() và chuyển vào một số ArrayAdapter đã được khởi tạo với dữ liệu từ số Array của String. Sau đó, khi bạn biết rằng dữ liệu đã thay đổi, bạn có thể sử dụng getListView() để lấy đối tượng Chế độ xem của mình và từ đó gọi getAdapter() để bây giờ bạn đang làm việc trực tiếp với tập dữ liệu. Bạn có thể xóa nó, và khởi tạo lại nó nếu bạn thích, hoặc chỉ cần thêm/loại bỏ các mục như bạn muốn. Từ đối tượng bộ điều hợp, nếu bạn gọi notifyDataSetChanged(), nó sẽ kích hoạt vẽ lại bằng bộ dữ liệu mới mà bạn vừa cung cấp cho bộ điều hợp.

Hy vọng sẽ giúp bạn. Hãy cho tôi biết nếu nó không.

DSC

+0

tôi vẫn là một chút của một người mới khi làm việc với những đoạn hội thoại. Tôi có nên giữ DialogInterface.OnClickListener làm OnClickListener hay sử dụng View.OnClickListener như tôi có thể với một Listview bình thường không? – Paul

+0

Kinda ngu ngốc của tôi để hỏi rằng khi tôi chỉ có thể thử nó. Hình như DialogInterface.OnClickListener là con đường để đi. – Paul

1

Nếu bạn thích tôi và bạn muốn sử dụng bộ điều hợp mặc định ví dụ cho các mục đa hóa, thì cũng có cách.

Cũng giống như với bất kỳ bộ điều hợp nào khác chỉ cập nhật đối tượng mảng chuỗi, lấy bộ điều hợp từ cá thể hộp thoại, truyền nó đến bộ điều hợp thích hợp và vô hiệu hóa bộ điều hợp.

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
AlertDialog instance = b.create(); 
instance.show(); 

// Later when you need to update 
MyStringArray[0] = "puf"; 
ListView list = instance.getListView(); 
// Now according to whether you used cursor or array for supplying items to the builder 
// you have to cast adapter to either CursorAdapter or ArrayAdapter 
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); 
adapter.notifyDataSetChanged(); 

You can find out more here.

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