2016-06-10 92 views
0

我對跟蹤某人的費用的應用程序工作問題,用戶將他們所購買的,它跟蹤的是,費用顯示在recyclerview,有來的時候,一個有太多的項目,因此需要搜索,因此我添加了一個正在查找的搜索功能,但是由於我正在處理費用,因此適配器有一個複選框,用於指示是否已經支付費用,當我搜索項目並勾選它已經支付的功能工作正常,但只要我退出搜索模式,我注意到的東西,在項目開始回到原來的位置,在列表中,但佔據該位置的項目之前修改的項目也繼承了支付狀態,它被勾選爲支付,希望我的解釋是有道理的,這裏有一些屏幕截圖來演示我的意思:與Android搜索查看在回收站

在第一個屏幕截圖

我們有一個正常的列表,但我將尋找Dgdf目前Dgdf在位置1

enter image description here

搜索Dgdf後所花費的數組中的位置0

enter image description here

因爲我有我一直在尋找的項目爲在這種情況下是Dgdf我決定將其標記爲付費的我做

enter image description here

但在這裏,只要我存在編輯模式的項目是需要位置0也被選中作爲支付

enter image description here是問題

下面是我的代碼,我使用了搜索:

protected FilterResults performFiltering(CharSequence constraint) { 
      final FilterResults oReturn = new FilterResults(); 
      final ArrayList<Expense> results = new ArrayList<>(); 

      //I thought loading new data from database each time would 
      // help but did not help at all 
      filterSearch = database.getAllExpenses(); 
      if (constraint != null) { 
       if (filterSearch != null & filterSearch.size() > 0) 
       { 
        for (Expense g : filterSearch) 
         if (g.getMerchantName().toLowerCase().contains(constraint.toString().toLowerCase())) 
          results.add(g); 
        oReturn.values = results; 
       } 
      } 
      return oReturn; 
     } 


@Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 

      //update adapter arraylist 
      adapterExpenseList = (ArrayList<Expense>) results.values; 
      notifyDataSetChanged(); 


     } 
+0

顯然,你不應該使用的位置,但有些ID ......這樣的錯誤是不過濾,但在存儲項目......簡單的方法將是商店的選中狀態,如果產品支票'Expense'模型本身 - 或者在某些SpraseArray – Selvin

+0

Selvin是的,你是正確的,將它們存儲在該模型將工作,這就是我做的,顯然它不工作,我試着打無效的回收和我注意到了所有項目的檢查,問題IDS在我調用'notifydatasetchanged()'時進來 – Chrometobia

回答

0

我科幻應受想通了這個問題,顯然一切都正常的與搜索算法,這個問題負責勾選複選框的代碼,我檢查只有一面,那就是

 if (expense.getIsChecked() == 1) 
     holder.checkBox.setChecked(true); 
     else 
     holder.checkBox.setChecked(false) 

不過當時我正在執行此選中該複選框已被設置爲true,因此沒有取消選中它的方式,所以我只是做這個

if (expense.getIsChecked() == 1) 
     holder.checkBox.setChecked(true); 


    if (expense.getIsChecked() == 0) 
     holder.checkBox.setChecked(false); 

我不得不檢查兩次出現,無論它是否是真的還是假的,和它的工作原理現在就好了。