Tôi có một ứng dụng trên thị trường có lỗi mà tôi không thể giải quyết được. Hôm nay tôi đã theo dõi nó xuống phương pháp sau đây.ListView trống rỗng mặc dù các mục được thêm vào bộ điều hợp đôi khi khi tiếp tục ứng dụng
public void updateDealList(ArrayList<Deal> deals) {
// first call or showing bookmakrs (also gets called other times when adapter is null)
if (dealListAdapter == null || showingBookmarks || !dealListAdapter.moreDealsToDownload()) {
dealListAdapter = new EndlessDealListAdapter(getActivity(),
R.layout.deal_list_item, deals);
setListAdapter(dealListAdapter);
listView = getListView();
if (getActivity().findViewById(R.id.right_fragment_container)!=null){ // if tablet
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT);
}
showingBookmarks=false;
Log.d("UPDATE_DEAL_LIST", "Notified list created new" + dealListAdapter.getCount());
return; //PROBLEM OCCURS WHEN APP COMES IN HERE AFTER RESUMING
}
dealListAdapter.getDealListAdapter().clear();
for (Deal d: deals){
dealListAdapter.getDealListAdapter().add(d);
Log.d("UPDATE_DEAL_LIST", "added " + d.title);
}
dealListAdapter.notifyDataSetChanged();
Log.d("UPDATE_DEAL_LIST", "Notified list " + dealListAdapter.getCount());
}
Phương thức này được chuyển qua danh sách mảng đối tượng được kéo xuống từ internet. Khi ứng dụng được mở lần đầu tiên, dữ liệu được lấy từ internet và phương thức trên được gọi là tạo ra một adapter mới được thiết lập cho ListFragment. Phương thức này cũng được gọi khi người dùng yêu cầu nhiều giao dịch hơn.
Sự cố mà tôi đang gặp phải là danh sách đôi khi cho rằng giá trị của nó có vẻ trống rỗng khi bộ điều hợp chứa giao dịch. Điều này dường như xảy ra khi một sử dụng tiếp tục ứng dụng khi thiết bị của họ là thấp trên bộ nhớ (tôi đoán một phần của ứng dụng đã được gỡ bỏ từ ram). Phương thức này được gọi và dealListAdapter là null nên một cái mới được tạo ra và các giao dịch được thêm vào. Mặc dù điều này xảy ra danh sách vẫn còn trống và người dùng phải buộc đóng ứng dụng để làm cho nó hoạt động trở lại.
Dòng bên dưới hiển thị hình khi phương thức được gọi là nó đi vào if và 21 giao dịch được thêm vào bộ điều hợp. Rất tiếc danh sách trống cho người dùng.
05-23 01:52:32.879: D/UPDATE_DEAL_LIST(3478): Notified list created new21
Hãy cho tôi biết nếu bất kỳ mã nào khác sẽ hữu ích. – bencallis
Sau khi bạn tạo bộ điều hợp, bạn xóa nó và thêm tất cả các mục từ mảng giao dịch. Bạn lưu trữ mảng này như thế nào? Nếu nó là một biến thành viên của lớp, nó sẽ không được giữ lại nếu hoạt động của bạn bị hệ thống giết chết. Bạn có lưu trạng thái hoạt động khi nó bị tạm dừng hoặc dừng lại không? http://developer.android.com/guide/topics/fundamentals/activities.html#SavingActivityState –
Khi ở trong phần thân của phương thức, nó trả về ở cuối để bộ điều hợp không bị xóa ngay lập tức. Bộ điều hợp được lưu trữ như một biến cá thể trong lớp ListFragment. Bản thân ArrayList không được lưu trữ, vì nó thay đổi thường xuyên. Không có trạng thái nào hiện được lưu. Có vẻ như khi ứng dụng được khởi chạy lại sau khi bị giết, sự cố sẽ xảy ra. Android làm gì khác khi khởi chạy lại một ứng dụng sau khi nó bị hệ thống giết chết trái ngược với việc khởi động ứng dụng từ đầu? – bencallis