6

Tôi đã tìm thấy rất nhiều câu hỏi về cùng một chủ đề nhưng tôi không thể tìm ra những gì tôi đang làm sai ở đây.Cách giải quyết "Nội dung của bộ điều hợp đã thay đổi nhưng ListView không nhận được thông báo" ngoại lệ

Ngoại lệ: "Nội dung của bộ điều hợp đã thay đổi nhưng ListView không nhận được thông báo. Đảm bảo rằng nội dung của bộ điều hợp của bạn không bị sửa đổi từ chuỗi nền, nhưng chỉ từ chuỗi giao diện người dùng "

Tôi có một trình soạn thảo TextViewer cho chế độ AutoCompleteTextView. Tôi đang cố gắng cập nhật danh sách thả xuống khi văn bản thay đổi. dữ liệu cho thả xuống từ hai nguồn khác nhau. Và mỗi một trong số họ chạy bên trong chủ đề khác nhau.

mTextWatcher = new TextWatcher() { 
     public void afterTextChanged(Editable editable) {   
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      suggestionNewText = s.toString(); 
      list = new ArrayList<Map<String, String>>(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        //data processing 
        list.add(data); 
        handler.sendEmptyMessage(1); 
          } 
         }); 

      Thread webAutoComplete = new Thread(new Runnable() { 
         @Override 
         public void run() { 
           //data process 
           list.add(data); 
           handler.sendEmptyMessage(1); 
      } 
      }); 

      try { 
        webAutoComplete.start(); 
       } catch (NullPointerException e) { 
       } catch (IllegalStateException e) { 
      }      
     } 
    }; 

Và handler cho adapter là bên cạnh textwatcher.

handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case 1: { 

       ((Activity) CONTEXT).runOnUiThread(new Runnable() { 
        public void run() { 
         try { 
          if (list != null) 

          suggestionAdapter = new UrlSuggestionAdapter(
            CONTEXT, 
            list, 
            R.layout.two_line_autocomplete, 
            new String[] { "title", "url" }, 
            new int[] { R.id.title, R.id.url 
              }); 
          if (list != null) { 
           refreshAdapter(list); 
           getUrl.setAdapter(suggestionAdapter); 

          } 

         } catch (Exception e) { 

         } 
        } 
       }); 
       break; 
      } 
      case 2: { 
       break; 
      } 
      } 
     } 
    }; 



public synchronized void refreshAdapter(List<Map<String, String>> items) { 

    list = items; 
    if (list != null) { 

     suggestionAdapter.notifyDataSetChanged(); 
    } 
} 

toàn bộ mã trên là bên trong Activity O Phương thức nCreate(). Tôi không nhận được ngoại lệ luôn. Nó xảy ra vào dịp cụ thể. Vấn đề này chưa được giải quyết. Tôi đã thêm phương thức notifydatasetchanged() sau khi tạo bộ điều hợp. Tuy nhiên điều đó không giải quyết được vấn đề. Bất cứ ai có thể chỉ ra những gì tôi đang làm sai ở đây?

+0

điểm kiểm tra là gì nếu đề xuấtAdapter là rỗng sau khi bạn tạo đề xuất mớiAdapter mỗi lần? Tôi không phải là một trong những người downvote này, nhưng định dạng mã của bạn có thể khó đọc mà không có khung thích hợp. – Neoh

+0

Cập nhật câu hỏi – intrepidkarthi

+1

Thử gọi gợi ýAdapter.notifyDataSetChanged() sau khi bạn tạo bộ điều hợp mới – Neoh

Trả lời

3

Cố định lỗi bằng cách thêm

suggestionAdapter.notifyDataSetChanged(); 

vào bất cứ khi nào danh sách được thay đổi thay vì gọi nó sau khi một số n chèn.