2017-08-08 81 views
1

我有一個顯示公司列表的數組列表。這些公司中的每一個都有與之相關的城鎮名稱。我所做的是,我爲每個城鎮名稱創建按鈕,以便當我點擊任何城鎮名稱時,應該過濾ArrayList,並且只應顯示具有該城鎮名稱的公司。ArrayList過濾不起作用:Android

我創建如按鈕,

 stringList.add(tempList.get(n).getTownName()); 
     btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 60)); 
     btnTag.setText(stringList.get(k)); 
     btnTag.setBackgroundResource(R.drawable.alpha_button_selector); 
     btnTag.setClickable(true); 
     townLayout.addView(btnTag); 

在點擊我打電話的方法來篩選數據的按鈕,

 btnTag.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       locationFilter(stringList,length); 
      } 
     }); 

用於過濾的數據,我創建一個新的ArrayList到存儲過濾的數據,如

 ArrayList<CompanySearchResult> secondList = new ArrayList<CompanySearchResult>(); 

     for (CompanySearchResult a : tempList) { 
      for (int k = 0; k < length; k++) { 

       if (a.getTownName.equalsIgnoreCase(stringList.get(k))) { 
        secondList.add(a); 
       } 
      } 
     } 

     tempList.clear(); 
     tempList.addAll(secondList); 

我實際上試圖做的是過濾按鈕被點擊時根據城鎮名稱的臨時列表。

我對此進行了研究,但無法解決問題。任何人都可以告訴我我做錯了什麼,如何過濾列表。

+0

你的哪個列表實際上填充了listview? TempList或其他列表? –

+0

tempList填充視圖。 – devgeek

+0

然後在做完addAll後你有沒有叫做notifyDataSetChanged()方法? –

回答

0

這裏的問題是,因爲得到了基於鎮名(重複消除)的數量編程方式創建的按鈕時,stringList.get(K),並沒有給我鎮的名字正確對應的按鈕點擊。

因此,單擊按鈕時,我拿來在按鈕上的文本,因爲它顯示的鎮名,然後通過了該方法對數據進行篩選,

btnTag.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      CharSequence name = btnTag.getText(); 
      locationFilter(name); 
     } 
    }); 

在我的過濾器的方法,我改變了到,

 ArrayList<ACompanyForSearchResult> filtered = new ArrayList<ACompanyForSearchResult>(); 

     for (ACompanyForSearchResult town : tempList) { 

      if (town.getTownName().equals(name)) { 
       filtered.add(town); 
      } 
     } 

     tempList.clear(); 
     tempList.addAll(filtered); 
     listAdapter.notifyDataSetChanged();